<?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/80578/ отличается от сабжа?
Если это обновление, то нельзя создавать специальную публикацию для этого.
если нет, жду развернутых пояснений по разнице.
Иначе одну из разработок удаляй сам или удалю я!
Жду ответа.
Эти варианты абсолютно разные, вариантhttp://infostart.ru/public/80578/ решает гораздо более узкую задачу — отображает информацию по сотрудникам, которые либо по каким-то причинам не попали в пачки при автозаполнении, либо были удалены пользователями из пачек принудительно, в итоге чтобы это выяснить человеку со стороны достаточно нажать кнопку «Заполнить взносы» и вуаля — список людей, которые должны быть в пачках, но их нет — как на ладони. Но это речь об анализе только второго полугодия.
Эта-же разработка делает совсем иное — гораздо более глобальное и более часто встречающееся — складывает исчисленные и уплаченные взносы за оба полугодия и выявляет переплаты в разрезе сотрудников. А функционал первой обработки остался во второй только по причине того что второй функционал был создан мною позднее. Но эти два функционала не взаимозависимы, могут работать абсолютно автономно один от другого, первый функционал оставлен для удобства, чтобы пользователь получал два в одном. Обновление — это я так понимаю развитие того-же направления или функционала, здесь же имеет место быть оставление прежнего функционала при развитии нового направления.
(3) Не совсем согласен, ты же оставляешь в новой разработке старый функционал, поэтому я и считаю это развитием/обновлением 🙁
Убери предыдущую разработку и вопрос будет снят.
Убери предыдущую разработку и вопрос будет снят.
понял, тогда если возможно, вечером уберу, хорошо? мне-же нужно будет анонс и комментарий грамотно объединить, название подправить и т.д., а сейчас срочные рабочие вопросы этого сделать не дают
Всё это конечно хорошо. Но востребованней была бы обработка, которая вытягивала бы данные об уплате не из файла «_1_ИСХОДНАЯ_12010.pf», а из XML ранее выгруженного из ЗИК.
Тут дело в чем. Многие выгрузку из ЗИК доправляют в сторонних программах от ПФР и выходной файл в итоге (в плане распределения оплат) может получиться отличным от подготовленного в ЗИК. Это во-первых.
Во-вторых, такая обработка пригодится в будущем — когда очередной релиз ЗИК, наконец, дозреет до хранения распределения оплат в базе 1С и можно будет загрузить из XML-ов распределение оплат за «старые» периоды.
Думаю, меня многие в этом поддержут.
Да, и *.pf можно потерять, а xml хранится надежнее.
Убери предыдущую разработку и вопрос будет снят.
Поступил проще — убрал из этой разработки старый функционал по причине их взаимонезависимости, теперь в разработке по сравнению исчисленных и уплаченных взносов за год нет функионала сравнивающего сумму взносов в пачках со сводной таблицей сумм взносов.
Всё это конечно хорошо. Но востребованней была бы обработка, которая вытягивала бы данные об уплате не из файла «_1_ИСХОДНАЯ_12010.pf», а из XML ранее выгруженного из ЗИК.
Тут дело в чем. Многие выгрузку из ЗИК доправляют в сторонних программах от ПФР и выходной файл в итоге (в плане распределения оплат) может получиться отличным от подготовленного в ЗИК. Это во-первых.
Во-вторых, такая обработка пригодится в будущем — когда очередной релиз ЗИК, наконец, дозреет до хранения распределения оплат в базе 1С и можно будет загрузить из XML-ов распределение оплат за «старые» периоды.
Думаю, меня многие в этом поддержут.
абсолютно согласен, конечно-же это и универсальнее и применимо в большем числе случаев, у самого пока нет возможности такое написать, если кто-то сделает и выложит буду рад «плюсануть» автору
//В итоге для сотрудников уволенных в течение 2010г. «Итого уплачено» может получаться больше чем «Итого начислено».
может «Итого начислено» сделать равным «Итого уплачено» а остальную сумму распределить пропорционально между оставшимися(работающими сотрудниками)???
Неплохо бы этот отчет скрестить сhttp://infostart.ru/public/80677/ . Брать данные из XML файлов с пачками СЗВ
Отчет понравился. Правда, убедилась, что *.pf вещь очень ненадежная. Например, у нас бух отчетность 1 полугодия делал в резервной копии (так как монопольно это делается куда быстрее), но перенести *.pf даже при условии что ту базу мы сохранили, тупо копированием *.pf в текущуую не получилсь. Не поняла даже почему. Кто знает — подскажите, не разбиралась ранее с форматом). Обработку с XML находила, но как-то мне не понравилась, looking -обработка показалась понятней и проще для пользователя. Поэтому прекрутила к нему анализ начального сальдо при формировании пачек 2 полугодия, отчет оставила тот же.. Не сочтите за плагиат, в наших условиях (работаем с несколькими фирмами и 1 полугодие сдавали нестандартно: закрывали оплаты уволенным и временно неработающим в предположении, что в след. периоде сотрудников без стажа не пропустит ни одна программа ПФР) стандартная 305 подтягивала уволенных и «дооплачивала» им сверх начисленного, а времени не остается… Если кто в подобной ситуации, можете попробоватьhttp://infostart.ru/public/81036/
Надеюсь, looking будет не в обиде…
Отчет понравился.
отчего-то не вижу Вас в плюсомёте 😀
Надеюсь, looking будет не в обиде…
Не в обиде, для меня главное результат, для этого и существуют коллективные разработки, т.к. одному до ума всё довести руки не доходят, особенно в период «новогодия»
Советую взглянуть наhttp://infostart.ru/public/80953/ от victuan, возможно это то что Вам нужно
Спасибо, посмотрю. Эту публикацию еще не видела, к тому времени потеряла надежду и решила что мы одни такие лопухи, которые «хотели сдать 1 полугодие не абы как, а с минимальными последствиями»…
(6) victuan,
Так оно и получается, пришлось переделать в сторонней программке, так как сотрудники, уволенные в 1 квартале 10-года размазывались в течение всего года, а Зик не давала выгружать корретировочные и теперь. когда все было поправлено ручками — не совпадает с выгрузкой ЗиК. И так стало непонятно: остатки по 10 году закрываются или не звкрываются в 11 году. Так как письмом ПФР было сказано все что уплачено в 11 так и падает в 11, хотя платежи могут быть за 10 год.
(15)Попробуй мою обработку, я в ней реализовал эти хотелки
http://infostart.ru/public/80953/
нужная вещь
хорошая штука
Спасибо за программу, очень помогает в работе.