<?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='\
Ой. С 14.07 по 28.07 — 24 (минус двадцать четыре) это в каких единицах?
(1)в днях календарных
😉
дата формирования отчета 21.08.2010 (написано на верху)
«дата»- 14.07-это дата создания накладной
«дата оплаты» — 28.07 — это дата до которой по договору клиент обязан оплатить накладную в данном случае 14 дней
«просрочено» 24 с минусом для красного цвета это количество дней прошедших после «даты оплаты»,
так как обработка называется долги, то соответственно клиент не оплатил накладную на момент формирования отчета, либо не разнесли оплату забывчивые бухгалтера
а без минуса черным цветом количество дней до «даты оплаты»
Дабы избавиться от разночтений предлагаю переименовать «Дату оплаты» в «Дату предполагаемой оплаты»
Аналог отчетаhttp://infostart.ru/public/70253/ , хоть и платный 🙂
(3) у меня не столь информативный только необходимое
платный я скачал но не юзал смутили комментарии и полное отсутствие рейтинга 😉
(0) Комплексная конфигурация — не работает!!!!!
(5) может быть
значит там нет регистров не ожидал.
(6) Ну, в нашом деле ожидать не можно! Нужно действовать и отладчиком пользоваться 😉
нам понравилось
Да согласен интересная реализация без регистров но в целом хорошая автору спасибо
очень удобная обработка, всем советую пользоваться
абсолютно нечитабельная разработка, когда надо получить «одним махом» состояние дел по просрочкам…
http://infostart.ru/public/71643/
в (3) — уже получше… но все равно мне не нравится — попытка в один отчет впихнуть все.
Но и эти отчеты полезны кому-то…
тем более что у топикстартера — бесплатно, в(3) — получше но лицензии, привязки, закрытый код скорее всего…
.
поэтому предложу что-то среднее: тоже платный, но код открыт, колво пользователей неограничено, поставщики/покупатели/общие долги — в одном флаконе…
кому понравится — пользуйтесь:
ну и вдогонку: обычно с отчетом по просрочкам хорошо идет график платежей как превентивная мера контроля клиентов
http://infostart.ru/public/16293/
(12) А мне нравится мояhttp://infostart.ru/public/70253/
но, обладает многими гибкими функциями… и фишками…
Этот отчет я совершенствовал с 2009 по 2011 год, так как все клиенты довольны и никто не просит что-то еще.
Каждый выбирает что нравится, с вашими отчетами я знаком, и они появились позже моей
(изучив мою сделали свою, но не факт что лучше 🙂 У вас идея с гибким заданием интервалов просрочки мне тогда понравилась!
(13) Платежный календарь, это немного не тот отчет — это к отчету ДДС (для фин.директора), а этот отчет меденжерам — по взаиморасчетам.
а мне нравится
Спасибо. 🙂
Самое интересное, что господа рекламодатели (3)(12),(13)и(14) даже не скачивали обработку
по поводу читабельности все верно код открыт интерфейс всегда можно подправить.(заказчик хотел именно такой для вывода на печать)
по поводу (9) используется запрос к регистрам
(17) Извиняюсь за рекламу, но я не хотел рекламироваться (правда!), а просто писал сообщение Чебурашке (он начал первым :-).
Кстати, по поводу (9), мой отчет не использует регистры, в нем реализовано списание долгов по FIFO
(если нет ссылки на документ основание)
Поэтому, в случае нарушенной «границы последовательности» (ГП)
все «регистровые» отчеты могут/будут показывать информацию с ошибками, пока не будет перепроведение документов.
Автору респект!
давно искал . спасибо!
мы пользуемся уже давно.Все работает отлично. только уж очень медленно формируется отчет- минут 15 как минимум.
А ведь не плохой отчетик, только выполнен небрежно и некрасиво, больше подойдет программистам, чтобы съэкономить время, лишь доделать под себя этот.
ТС посоветую поработать над ним, добавить настройки выбора даты, контрагента (конкретного или покупатель/поставщик), поработать немного над внешним видом(интерфейсом и выходной формой, а то сейчас он вообще не читаемый, особенно если контрагентов очень много), и думаю, если стоит у контрагента НЕ КОНТРОЛИРОВАТЬ долги, то выводить такого контра не имеет смысла. и сможете так же его продавать как здесь прокомментировавшие.
Но для бесплатной версии очень даже хорош. Так что от меня ПЛЮС.
дорабатывается для каждого отдельного случая, есть версии с использованием проектов, отсрочкой в банковских днях, выбором контрагента, даты, ответственного, автора, но это всё весьма специфично и зачастую остается у заказчика. P.S. найду залью