<?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='\
ВнешняяОбработка.АвансФиксированнойСуммой.МодульОбъекта(165)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса «Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1
»
РезультатЗапроса = Запрос.Выполнить();
по причине:
Ошибка выполнения запроса «Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1
»
по причине:
вещь нужная, но нужно доработать, в УПП испохабили ведомость на выплату з/п порядочно
Вообще-то обработка для ЗУП, а не УПП. Попробую завтра посмотреть, но пока ничего не обещаю.
Зарплата в УПП 1.2 вроде почти та же, что и в ЗУП 2.5
(4) теперь должно работать
Все же надо довести обработку до ума, следующие замечания:
1. Обработка не учитывает районные и северные, только оклад.
2. Неплохо добавить фильтр по подразделению.
Ну и рассуждения на тему кривых ведомостей на выплату з/п в новых редакциях УПП. Ведомость в УПП в части планового аванса совершенно не учитывает удержания, поэтому в обработке учитываем процент с учетом удержания НДФЛ.
Как вариант лечения тупости отдельной части коллектива 1С, клеить к ведомостям обработки заполнения табличных частей.
(6) 1. Да, не учитывает. В нашей организации северные-районные рассчитываются только после полного расчета зарплаты. По сути, документ начисления за первую половину месяца является информационным. Он делает только часть движений от полного расчета. И этот пункт добавлять в него не вижу смысла, если честно.
2. Зачем? Обработка только заполняет авансы на основании документа начисления. Выплаты делаются отдельно и вручную. По-этому так же нет смысла добавлять этот пункт. Если нужно по подразделениям, то это легко делается самими выплатами…
Ну и по поводу рассуждений 🙂
Еще раз повторюсь: Документ начисления за первую половину месяца является информационным. Он делает только часть движений от полного расчета. По-этому, ведомость созданная на его основании и не должна учитывать удержания.
Теоретически можно добавить расчет НДФЛ для удержания его из выплаты, но! Либо делать полностью правильный — тогда обработка станет намного сложнее и дольше будет работать по времени. Любо делать «грубый» расчет, что не является правильным и возможны в будущем из-за этого проблемы.
Не соглашусь. Начисление за первую половину месяца учитывает все начисления и удежания, что находило свое отражение в ведомости на выплату з/п в прежних релизах УПП, т.е. суммы в ведомость проставлялись с учетом всех начислений, удержаний и НДФЛ и это логично и исключает переплаты.
По вашей логике часть информации из начисления берем, часть не берем…непонятно
(8) Я не знаю как в УПП, но в ЗУП при проведении такого документа формируются записи только: в регистре накопления «РасчетПервойПоловиныМесяца» и в регистре накопления «НДФЛРасчетыСБюджетом» (нулевые записи!).
Подозреваю, что в УПП сейчас такая же картина. Ни о каком «Начисление за первую половину месяца учитывает все начисления и удежания» речи быть не может 😎
Раньше было по другому, но все течет, все меняется. И данная обработка разработана с учетом текущих реалий.
Кроме регистров есть сам документ начисления, вот там ЕСТЬ возможность посмотреть расчетный листок за первую половину 😉 с ндфл, алиментами и пр., запутались вы батенька
(10) Наверное мы говорим на разных языках 🙂
Пример с регистрами приведен как показатель, что документ рассчитывает не всё. Расчетный листок — это свосем другая опера. И если нет последующего документа с полным расчетом, то расчетный листок показывает не всё.
В любом случае, сейчас идет разговор не в рамках этой обработки, отнюдь.
То что вы хотите — это скорее уже большая часть АРМ. А это уже другой уровень разработки. И честно говоря, без чётко поставленного ТЗ и из чистого альтруизма я за него не возьмусь. Просто потому что времени будет потрачено очень не мало, а есть и другие задачи, которые требуется выполнять на основном месте работы.
скачала, но в итоге пользуюсь встроенными функциями, плановым авансов в виде фиксированной суммы
(12) Зачем тогда качали? Что именно не устраивает?
спасибо то что искал, самому лень писать очень пригодилось, тем более период отпусков времени мало совсем. Правда под УПП не понял будет работать или нет