<?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='\
Добрый день) делаю все по инструкции, по после нажатия кнопки «Расчет квартальной премии» значения обнуляются
Здравствуйте! Скажите конфигурацию и платформу, релизы?. Потом еще попробуйте с начало:
— нажать на кнопку «Заполнить показатели» (смотрите рисунок 2) выбираем добавленные показатели, заполняем значениями например «1». Нажимаем «ОК»;
— затем сохранить документ (кнопка «Записать»);
— и нажать нашу добавленную команду «Расчет квартальной премии».
Взял за основу, немного переписал код, теперь рассчитывается без предварительные действий. ЗиКБУ
Предварительное действие делал больше для себя, для развития так сказать. Так что принципе это окошко с выбором всех сотрудников или выделенного и не нужно.
Добрый день ,у меня обработка работает не корректно (1С:Предприятие 8.3 (8.3.12.1412)Зарплата и кадры государственного учреждения, редакция 3.1 (3.1.6.6))
норму всем ставит одинаковую , т.е. норма меняется если меняется период , но у всех сотрудников в табличной части одинаково и причем количество странное , ни к чему не подходит, а факт вроде правильно выдает.
(5)Здравствуйте! Сообщение увидел, но пока никак не могу посмотреть Вашу ошибку — на работе завал. Как освобожусь обязательно выясню в чем проблема.
(6) На релизе 3.1.7.87 не работает, выдает сообщение с текстом «1».
у меня тоже выдает сообщение с «1» , но «отработано дней в квартале» собирает.
Здравствуйте! На этой неделе обязательно посмотрю. Сообщение с «1» — это мое тестовое сообщение (забыл за комментировать).
(9)
посмотрите обработку очень нужна
(10) Вроде обещал, но на работе запара. Еще раз попытаюсь глянуть.
(10) автор, есть смысл ждать или пора уже отчаяться?
Здравствуйте! Смотрел обработку, но ошибок не нашел. Если бы на демо базе смоделировали проблему — так точно бы исправил.
попробую
не работает
На релизе 3.1.7.128 не работает, выдает сообщение с текстом «1».
(17)
(17)
Ого спасибо за предложенное решение. На досуге надо будет посмотреть.
(18) Вас спасибо за обработку))) плюсую
Добрый день. Скачал вашу обработку но она оказывается не работает. Жаль потраченных СМ.
Выдает текст с ошибкой 1. И не заполняет норму и отработано.
Скажите есть рабочий вариант?
Здравствуйте! Посмотрите ответ выше от mumik_nr. Возможно поможет. У Вас ЗУП или ЗИКГУ?