<?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='\
Очень полезный отчет, отдел кадров пищит от восторга!
Скоро можно будет увидеть остаток/перерасход отпуска в суммовом выражении.
отчет у меня работает с ошибками и некорректно считает остатки отпусков. наверное потому что работников больше 1000. 😎 поставил плюс за «заготовку» отчета.
К сожалению,
{ВнешнийОтчет.ОстаткиОтпусковСотрудниковОрганизации(95)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса «Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Adding a value to a ‘datetime’ column caused overflow.
HRESULT=80040E07, SQLSrvr: Error state=1, Severity=10, native=517, line=1
»
Запрос.Выполнить();
по причине:
Ошибка выполнения запроса «Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Adding a value to a ‘datetime’ column caused overflow.
HRESULT=80040E07, SQLSrvr: Error state=1, Severity=10, native=517, line=1
»
по причине:
Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Adding a value to a ‘datetime’ column caused overflow.
HRESULT=80040E07, SQLSrvr: Error state=1, Severity=10, native=517, line=1
(3) «В отчете используется типовой механизм расчета остатков дней отпуска» можете писать в 1С, это все они))) если исправят процедуру расчета, то в отчете это отразится.
(4) только что протестировал. платформа 8.1.12.101, ЗУП 2.5.10.11, SQL 2005. Ошибок нет.
огласите версию платформы и SQL, пожалуйста. и способ реализации ошибки.
(4) кстати, корректно ли у вас работает отчет «Списки работников организаций»?
(7) 8.1.12.101 ЗУП 2.5.12.1 SQL 2000 SP3
Подключаю как дополнительный внешний отчет. Можно выбрать как-то организацию ?
Вопрос по выбору организации снимаю 🙂 Списки работников организаций — работает нормально
сегодня протестировал на sql 2000 sp2, отчет сформировался без ошибок. даже не знаю, чем помочь. буду подумать.
Это не может помочь ?
http://itland.ru/forum//index.php?showtopic=13292
обрадовался. поставил. в итоге ошибка:
{ВнешнийОтчет.ОстаткиОтпусковСотрудниковОрганизации(95)}: Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «ПлановыеНачисленияРаботниковСрез.ВидРасчета»
ИНАЧЕ <<?>>ПлановыеНачисленияРаботниковСрез.ВидРасчета
Запрос.Выполнить();
по причине:
{(7, 9)}: Поле не найдено «ПлановыеНачисленияРаботниковСрез.ВидРасчета»
ИНАЧЕ <<?>>ПлановыеНачисленияРаботниковСрез.ВидРасчета
в наличии
1С:Предприятие 8.1 (8.1.11.67)
Зарплата и Управление Персоналом, редакция 2.5 (2.5.10.11)
Нужна платформа 8.1.12.101
Очень замечательный отчет. очень понравился. Но маленький недочет, который пугает ))) не правильность происходит с сотрудниками, которые находятся(находились) в декретном отпуске. за 3 года проведенные в декрете отчет смело добавляет в остаток 84 дня (28*3)
Еще проблема -более 14 дней в году за свой счет (уменьшает отпуск)
> Еще проблема -более 14 дней в году за свой счет (уменьшает отпуск)
Так ведь по ТК РФ и должен уменьшать. Или отчет таки НЕ уменьшает?
> за 3 года проведенные в декрете отчет смело добавляет в остаток 84 дня (28*3)
Этот отчет здесь, вероятно, не причем. Стандартные расчеты ЗУП дали мне такой же результат. Видимо надо или регламентный алгоритм 1С править или руками вычитать…
по 300 сотрудникам без доп настроек работал долгонько (сек 10) на не слабой машине, а хотелось бы секунды две)))
но это мелочи!
Спасибо!
а у меня выдает ошибку «не найдено поле ПлановыеНачисленияРаботниковСрез.ВидРасчета»… в чем проблема?
Этот отчет не учитывает заполненный справочник, «остатки отпусков прошлых лет». В следствии этого, неправильно считает остаток отпуска.
Спасибо, но поскольку базу перенесли с 7-ки, то использовали «остатки отпусков прошлых лет» — с ними считает неправильно..
Ошибку: «Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Adding a value to a ‘datetime’ column caused overflow» из-за MS SQL, т.к. иногда получается слишком длинный запрос который скуль не всилах принять полностью. После перевода на Postgree все заработало, на файловой версии тоже все работает.
А как глянуть за какой период работы этот остаток висит?
а для ЗиК 7.7 есть нечто подобное?
Отчет работает отлично.
Но вот возник вопрос как туда впихнуть Дополнительные дня отпуска для людей радей работающих ненормированный рабочий день
Тоже вылетает ошибка SQL с вышеуказанным сообщение.
Причина:
Microsoft OLEDB Provider for SQL Server: Adding a value to a ‘datetime’ column caused overflow. HRESULT=80040E07, SQLSTATE=22077, native=517
Возникает при выполнении функций над датами в том случае, если в качестве их результата получается слишком большая или слишком маленькая дата. Для Microsoft SQL Server минимально допустимой является дата 1 января 1753 года, а максимально допустимой — 31 декабря 9999 года.
Значит где-то у кого-то в используемых в запросе полях скорее всего незаполнено значение дат (00010101000000 =))))
ЗУП 2.5.14. На каждого сотрудника отчет выводит две строки с видом отпуска Основной и Дополнительный соответственно. У каждой строки свой остаток дней. Чтобы это значило?
Так что, в последних редакциях ЗУП у вас отчет работает нормально? Дайте свежие отзывы…
Подскажите, как установить этот отчет. Пишит, что он не является внешним отчетом или не предназначен для этой конфигурации. У меня конфигурация 8.1.13.41. Номер версии 2.5.17.8
2.5.21 на 8.2.10 после конвертации и открытия пишет
Ошибка в схеме компоновки данных
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(140, 21)}: Поле не найдено «СоставСемьиФизлица.ГодРождения»
СоставСемьиФизлица.<<?>>ГодРождения КАК ФизЛицоГодРожденияРодственника,
Спасибо за отчет!
хорошая заготовка, не боле
спасибо, наконец-то хоть одна из множества подобных обработок считает правильно 😀
полезная обработка
Спасибо за обработку, сейчас работает вроде нормально.
Очень пригодилась! Большое спасибо автору! Удачи Вам!
Да, действительно, на 8.2 отчет не работает, ругается на ФизЛицоГодРожденияРодственника =(
В отчете , на мой взгляд, не хватает колонок даты окончания рабочего периода и остатка на эту дату. Но в целом отчет пригодился. спасибо
С какой целью при расчете остатка отпуска в запросе прописан сбор посторонней информации, например
Показать
под Зарплата и Управление Персоналом (2.5.33.4)не работает… жаль что потратила время и рейтинг на этот отчет
Отчет мне оказался полезным — на его базе сделал нужный мне. Также интересен был код. Спасибо!
Как исправить следующую ошибку?
{ВнешнийОтчет.ОстаткиОтпусковСотрудниковОрганизации.МодульОбъекта(180)}: Метод объекта не обнаружен (ПодготовитьДанныеПоРегламентированнымОтпускам)
ВыборкаПоОстаткам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаСотрудников,,Ложь,);
метод удалили в новом релизе, а другой не добавили?)