<?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='\
Хорошо. А откуда текст, если не секрет?
Тексты модулей в публикации можнораскрасить получше
Слишком сложно для начинающего программиста. 🙂
Актуально.
А по кадровой подсистеме нет подобного?
(5) Нету… Писал для самого сложного…
Спасибо. Почитаю. Нужно. Подсистема кадровая не освещалась подобным образом? 😉
С ЗУП только начал знакомиться. И не понимаю, почему при расчете больничного, например не перерассчитываются вытесняемые больничным записи, например оклад, если он уже ранее был рассчитан? То есть не понятно, как на практике в организациях обходят эту проблему? Нельзя же просто сказать расчетчику, что документ «Начисление зарплаты» нужно рассчитывать в последнюю очередь, да и мало ли что бывает… В общем, если кто поделится опытом по данному моему затруднению, буду благодарен.))
А автору спасибо за отличный материал!
Сергун, всё имнно так, как ты и написал — начисление зарплаты делается в последнюю очередь, после всех док-ов типа отпуска или б.листа. такой вот ужас. а если что не так, что-то вспомнили после «закрытия» месяца, то вводятся документы-исправления.
спасибо за статью
Спасибо за статью
прекрасная статья!только можно было разбить на пункты и блоги!а то слишком большая для восприятия!
Спасибо за статью
Спасибо за статью.
Для начального изучения — однозначно плюс
Благодарю автора очень помогла статья, все четко и без воды.
Спасибо за статью
Давно искала информацию по добавлению нового вида расчета. Автор очень помог. Спасибо.
Очень интересная и нужная статья. Автору спасибо!
А можете немного рассказать про универсальные способы расчета, как их использовать.
Актуально! Как раз с ЗУП’ом надо разбираться =) Автору спасибо!
Хорошая статья. Внедрение зарплаты занимаюсь более 10 лет. Часто приходят новые сотрудники, которым приходится пытаться на пальцах обяснить сложные расчеты. Теперь есть куда отправить, если нет времени 🙂
Класс. Однозначно +
Когда начинал работать с ЗУП — эта статья была бы ну очень кстати и не пришлось бы все ковырять самому 🙂
Прекрасная статья, огромное спасибо! И нашел вовремя — как раз готовлюсь к специалисту. Сэкономил себе кучу времени на начальное изучение «внутренностей», ведь ранее с конфой работать не приходилось.
Хорошая статья
Действительно одна из сложных конфигураций, с доработкой бухгалтерии и других конфигураций особых проблем не возникало, а здесь для меня вообще пока ничего непонятно. Бухгалтера просят сделать так, чтобы вычет НДФЛ делался только на доходы определенных видов начислений, а не на все, полазил в конфигураторе по модулям, голова заболела, пошел спать (((
Хорошая статья, автору +. (24) Borometr, ха, правильно сделал, а то бы начал там модуля переписывать.
Отличная статья, все разложено по полочкам и даже объяснено почему реализовано именно так. Автор молодец!:)
Статья отличная, автору +. Кое-что для себя подчерпнул
Отличная статья. Спасибо автору. Все доступно и понятно.
Мир этому дому!
Отличная полезная статья. Попалась бы она год назад, как раз, при изучении программирования на курсах… Плюс однозначно…
Спасибо автору, полезная статья!
Спасибо за статью.
(24) мало того, скорее всего буЛГахтеры неправы…
В подавляющем количестве случаев хотелки бухов по ЗП идут вразрез с положениями законодательных актов.
Побольше бы таких статей
Однозначно полезная статья.
Хорошая статья! Надо взять её на вооружение! 🙂
Очень не плохо, познавательно, по отдельным моментам заполняются пробелы
Хорошая статья, ждем продолжения 🙂
На дворе уже 3.0
Забираю в избранное. Надо изучить.
Тоже буду изучать, как раз занимаюсь на курсах по ЗУПу, автору однозначно +++++
(5) oaf_is, (7) oaf_is, вот по кадровой системе:http://infostart.ru/public/248004/
Отличная статья. Как раз стоит задача быстро въехать в типовые расчетные механизмы.
Если установлен флаг «КомментироватьРасчет», то …
Как включить это флаг, если на форме ни флага, ни кнопки таковой нет.. ??! беда.
Например, Начисление отпуска сотруднику, рассчитать НДФЛ.
В коде написано четко: КомментироватьРасчет=Ложь и всё.
А ниже в процедуре куча кода для комментариев расчета.
Добрый день! Автору большой плюс! Вот бы такую статью по ЗУП 3 ! Скоро переходим, почитать бы про него. Может, у кого есть ссылочки, ребята, поделитесь ?
ПЛЮС. Пригодилось для изменения формул расчета в упр. учете.
Вот бы кто такое же по части ЗУП 3.1 написал?
(2)Сайт прекрасно сам всё раскрашивает. Только теги кода не каждый под носом видит)))