<?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='\
Конфигурация???
Тис 9.2
не работает -незачетЪ
Вывалилось кучей ошибок.
«Нижнейшими уровнями..» по русски «Последними уровнями». по умолчанию их надо поставить так.
Если Запрос2.Выполнить(ТекстЗапроса2) = 0 Тогда
{C:ВЕДОМОСТЬПОДОЛГАМ%.ERT(1145)}: <<?>> Период с ДатаНачала по ДатаКонца;
и т.д.
(3)логи плз
Группировки Контрагент и Договор выставлены?
Не работает на «обрезанных» базах (т.к.) для определения начального остатка пени перебирает документы от начала времен.
(5) смотри (4) — вывалились точно такие де ошибки. Да база обрезанная. Что надо сделать чтоб заработало под нее?
(4) А можно скриншот с настройками на dailapu*inbox.ru пжл
Строка 1137 кода гласит:
ТекстЗапроса2=СтрЗаменить(ТекстЗапроса2,»ДатаНачала по ДатаКонца»,»Дата0 по Дата1″);
Оставтье пока вид отчета «Общие взаиморасчеты» (по умолчанию),
ибо заточен был отчет согласно экономическому смыслу под анализ одного контрагента, у клиентов работает с дефолтными настройками на типовых.
Скачайте последнюю версию с сайта(с)
Не рейтинга ради, праздника для
русский язык верну в свои права при 1 случае:)/,
(6)эврика, щас все будет,
с отбором по контрагенту без группировки
Кредитный документ работает?
Очень просто рассчитывается кол-во дней просрочки (ДнейПроср=?(ПосДата=’..’,0,ТекДата-ПосДата);)… в реале данный отчет не подходит… это скажет любой юрист.
И причем тут ДатаНачала ??? Отчет должен работать НА ДАТУ т.к. данный очет должен оперировать исключительно оборотами с начала взаиморасчетов с контрагентом ИМХО
(9) Написана сия штука была для имплантации в ТИС функционала шаровары ЮристРасчетЭксперт, вся методическая основа «Как там», и Астраханским клиентам подходит.
Решена задача прикида наценок/отсрочек платежа для покупателя на основе анализа его платежной дисциплины.
Оч.хотелось бы, чтобы «Любой Юрист» указал на обсуждение причины, по которой «Очень просто рассчитывается кол-во дней просрочки» является проблемой
(ДнейПроср=?(ПосДата=’..’,0,ТекДата-ПосДата)… говорит о том что фирма молодая, ввод остатков пени не сложно дописать, надо?
(10) «Очень просто рассчитывается кол-во дней просрочки» … извини, не правильно выразился, скорее так «Не верно рассчитывается кол-во дней просрочки»
Будет время — подробно обосную….
(12) Буду рад новой методике, на тек.момент известна проблема пересекающихся дат, когда в накладных одного контрагента разное число дней отсрочки, что приводит к отрицательным процентам пени; будет время — починим;)
Замечания (3),(4) учтены в новой версии, отбор по контрагенту оставим обязательным или норм.?
Прошу пардон.
Пару вопросов (посмотреть обработку не смог)
как расчитываются пени? от суммы документа или от суммы без НДС?
обычно по доковору клиент платит не за документ а по договору.
Следовательно стоит иметь подробную расшифровку по документам и «оплатам » этих документов с указанием документов оплаты (с датами).
соответственно неплохо бы все завернуть в типовую бумажку с грозными словами типа суд и больше не играем 😀 чтобы осчастливить юриста или его заменяющего. Крайне рекомендую сделать возможность распечатки реестра документов по месяцам крупно , для поиска оригиналов по архивам. И также добавить информацию о том сколько дней отсрочки у клиента по договору и фактически.фактически разница между датой документа и датой оплаты с учетом того что механизм движения даты оплаты отлажен для указания на то что может случится что дата оплаты по каким либо причинам была установлена меньше чем дней отсрочки по договору и данные документы нельзя принимать к рассмотрению без пересчета даты оплаты.
Хорошая идея только в прошлом месяце закончил реализацию комплекса юриста по даннному вопросу.
Итак автоматизацию в массы!
ПРОшу пардон второй раз
ВСЕХ С НОВЫМ ГОДОМ!!!
А как все это с частичными оплатами до документу заработает?
Например должен 10 000,
просрочил 2 дня (пеня за 2 дня с 10 000)
оплатил 8 000
через 20 дней (еще пеня за 20 дней, но уже с 2з тысяч)
оплатил еще 1 000
и т.д.
Что будет происходить если при оплате по договору после перепроведении погашения разнесутся по другим документам и подтвердить изначальную бумажку с расчетом будет нечем?
Если поставить группировку по контрагенту — то вываливается вот такая ошибка — Запрос2.Получить(ЗнчИзм(Запрос,СписокГруппировок,Ном),)//);
{E:PENNI.ERT(725)}: Слишком много параметров передано при вызове функции/процедуры объекта
(18)Это когда отсутствует отбор по контрагенту(ам)?
Починим, пока логичней оттточить методику согласно (9)
пока
«Отбор по контрагенту(ам) обязателен»
(15),(17) Оплатой «по документу»(кстати откуда необходимость?) и выделением НДС не озадачивались, можно над этим поработать, особенно если выделить комплекс юриста в 1с-совместимую шаровару)
(19) комплекс юриста «встроил» в торговлю. Выделять нет смысла.
Необходимости всплывают в суде… Сумма без ндс должна быть и точные расчеты по срокам договора и установленым в документе…
Вобщем советую «потрепать» юриста.
(17) Бумажка делается на или за день до суда и далее меняеется с согласия обоих сторон и суда (например банковский плате задержанный по причинам независяфим от сторон и поступивший на момент судебной тяжбы причем пени по неоплаченным и оплаченным «просроченным» накладным могут быть расчитаны отдельно).
Так было в паре фирм. Я тоже сначала сзадачился фиксациейно с юр стороны бумажка значит больше так что забил.
(20)задача обры лишь прикид наценок..
Коль до суда дойдет, конечно, знаем теперь к кому за сорцом идти)
(21) Дык не в укор, а пользы для, писал сию поэму я.
Коль для наценок был урок, тогды оброк считаем впрок.
С бояр по рубь, с крестьян копейка, глядишь получится ПРЕМИЯ (ну не придумал я рифму зато правда).
Перевожу тогда имеет смысл с учетом данных пени (вычитать из прибыли по клиенту например) помучить какой процент мы с него получаем и на «недостачу (пени) » увеличивать наценку по договору например.
Блин ну не научили меня думать с запятыми.
Добавился Коэффициент оборачиваемости дебиторской задолженности (Receivables Turnover, RT) — отношение оборота компании к среднегодовой величине дебиторской задолженности.
(22)
Если (%наценки+%штраф.наценки)=(%наценки+%пени) легко добавить расчет %штрафной наценки
Себестоимость подтянуть осталось..
(24) вот смотри какой инструмент вырастает.
(будешь делать платным вспомни про старого еврея 😉 )
(25)Чтовы что вы) Ещё дядька Норбеков грил евреи не бывают старыми и новыми — они всегда свежие)
обновил
всем спасибо
будут бонусы поделим
(27) Ну что вы какая дележка. Я согласен просто на бесплатный продукт.
Исправлены косые «Отсрочка»(теперь не захватывает платежки) и строка Итогов(считает пеню до даты конца отчета).
Вывод строки итогов после каждой группировки по контрагенту.
Начиная с 1.0 Нач.ост пени в заголовке группировки по контрагенту не отображается-там итог пени.
А для 8.1 торговли можете выложить этот же отчет? Очень нужно для суда.
(29) 22 пост утверждает отсутствие необходимой закону точности в данном инструменте, его ниша скорее расчет менеджером скидки
нужная вещь
Доброго дня! Отчет хороший, но если (ДатаКонца + Отсрочка)>ТекДата тогда считает пеню на дату больше ТекДата, что в свою очередь приводит к минусовой дате задолженности и пене для (ДатаКонца + Отсрочка) > ТекДат. Или это гениальная задумка разработчика?)
(33) Доброго и вам! За время эксплуатации руководителя это устраивало, а с переходом на 8ку стало неактуально. Есть готовые предложения? С радостью внесу в алгоритм
Altez, понял вас! Был бы вам очень признателен($m ) за доработку данной обработки. Хочется иметь возможность(галочка) не выводить в таблицу если текдата> преддата. То есть если сегодня 09.11.2015 , мы выбираем период по 08.11.2015 контрагента с отсрочкой в 7-мь дней то выводить в таблицу только задолженность по 08.11.2015, просчитывать до 16.11.2015 не надо. Соответственно в таблице не будет к-во дней с «-» и сумма пени будет тоже положительная)
Ну а если галку не ставить-изначальный вариант. Сможете доработать? Со своей стороны скачивание за $m гарантирую)
(35) ASSuk, на днях скачаю ТиС поправлю
(36) спасибо! Жду!
(36) вы про меня не забыли?)
(38) ASSuk, выслал, работает?