<?php // Полная загрузка сервисных книжек, создан 2025-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='\
это все таки для 7.7 или 1С8 — уточните в описании
Дорогие Медераторы поменяйте это для 8.1, он почему то не дает мне изменить, не сохраняет выбор.
Медераторы=модераторы
В обработке закралась ошибка, хоть и не большая всеже неточность. И главное не кто не заметил что ли. Внимательно посмотрите на картинку меся платежа 9 и что мы видим. Вот именно после января у нас идет март а это не есть гуд.
Там, где я увеличиваю месяц необходимо заменить строку МесяцПлатежа=МесяцПлатежа+(60*60*24*31) на МесяцПлатежа=ДобавитьМесяц(МесяцПлатежа,1);
Отличная вещь получилась!
Я бы еще посоветовал добавить функцию Печати ТЧ.
Хех, я такой-же в Ехеле сделал пару лет назад)) Зачет!
(6) Ок. сделаем
ну а предположим,клиент хочет ежемесячно платить фиксированную сумму?!
(9) И это можно реализовать. вообще этот калькулятор я писал для своего взятого кредита, но задачу понял. Ждите :~)
да не актуально уже,мне интересно как вы это сделаете.
Довожу до вашего сведения товарищ Zlodey, что ваша обработка рассчитывает график платеже неверно. Обычно при расчете кредитов годовая процентная ставка делится на число месяцев в году (12) а не на количество дней как у вас. Алгоритмы расчета различных видов кредитов и кредитные калькуляторы вы можете посмотреть по адресу:
http://www.banki.ru/forum/?PAGE_NAME=read&FID=11&TID=1621&MID=88046
(12) У меня кредит взят на 5 лет и эта обработка почему то считает у меня правильно, если ту думаешь что она тебе 100% график платежей выдаст, то уверяю тебе кроме банка не кто не даст её т.к в любом случае будут погрешности с округлением и т.п+возможно еще какие то пени по твоему кредиту о которых ты и сам не знаешь. НО ЕЩЕ РАЗ ПОВТОРЯЮ У МЕНЯ ВЗЯТ КРЕДИТ У СБЕРБАНКА НА 5 ЛЕТ И Я С НИМ СРАВНИВАЛ
(12) Советую прочитать условия вашего договора.
(12) Разница около 60 рублей :~).
А у меня валяется здесь целая конфа «Кредитование». Позволяет автоматизировать работу кредитной конторы. Почему-то не заметили… 🙁
(16) Может хватит одного моего калькулятора
Ну, если не надо получать развернутую статистику по выданным кредитам, иметь возможность работать с разными видами кредитования, предполагать оплату по остатку и пропорционально сумме, рассчитывать пени, делать возможным погашение в разных валютах — то да!
Повторяю: алгоритм этой обработки некорректный и не соответствует алгоритмам расчета ниодного банка (в т.ч. Сбербанка). Действительно, когда сумма и срок кредита небольшие ошибка незаметна. Но допустим берем кредит 1 000 000 руб. на 10 лет под 10% годовых. В результате эта обработка выдаст что выплаты по процентам составят 497 260,28 руб. А по наиболее распространенному алгоритму (используемому в т.ч. Сбербанком) получится 504 166,86. Разница 6 900 руб.
И это НЕ погрешность с округлением. Рекомендую исправить алгорит на следующий:
Условные обозначения: T — количество периодов оплаты; Кр — сумма кредита; Ст — процентная ставка, начисляемая на задолженность за период; Плi — размер платежа за i — й период (i принимает значения от 1 до T); ПКр – сумма процентов, выплаченных по кредиту за весь срок кредитования.
ПКр = Кр*Ст *(Т + 1) / 2
Плi = Кр / T + Кр*(T-i+1)*Ст / Т
или уничтожить обработку безвозвратно и не вводить людей в заблуждение
(19) Слушай AbEv если ты думаешь что ты одни такой умный то ошибаешься, я тебя и с первого раза понял на днях выложу обновленную версию. Потерпи чуть чуть.
(19)http://www.ipotek.ru/formuladp.php посмотри какая там формула.
(19) а как в таком случае расчитать процент за неполный месяц? В том же Сбере, есть разница в платеже в зависомости от того, когда принёс платеж до дня, а не до месяца!
Интересная задумка