<?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='\
Плиз, по-возможности оставляйте критику ) (хамло может проходить мимо)
(1) Если не хамить, то моя критика укладывается в одну строку:
Запрос=Новый Запрос(«ВЫБРАТЬ РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,МЕСЯЦ) КАК Месяцев, РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,ДЕНЬ) КАК Дней»);
coder1cv8 спасибо. Теперь буду знать)
2(2)
В теме+картинке условие задачи другое. Запрос выполняет половину заданного.
(0) сделай рабочих дней
(4) не выполняет и половины
в зупе насколько я помню стаж вводить надо через лет, месяцев, дней. ибо просто так 78 месяцев это не наглядно. и не удобно.
покопал инфу по екселю, ввел формулу, сделал табличку, кадровики уже по ней 400 чел просчитали стаж.
(7) в ЗУПе нажно вводить стаж следующим образом: на дату приема ставится количество месяцев и дней стажа! В екселе расчитывать стаж неудобно, по крайней мере у нас, т.к. пользователи работают в Ске под терминалом и переключение из терминала на машину, чтобы расчитать стаж в екселе — не есть удобно. Потому и написал для кадров эту штуку. Да, rasswet, по-мимо же расчетов стажа, кадрам необходимо эти цифры еще и забить в Ску (вторая версия реализует это). Хотя, критика принимается)))
сделай переключатель «лет, месяцев, дней»-«месяцев, дней». мне не надо (я в екселе), но будет универсальнее. мож кому-то и пригодится.
сделдю
БП 1.6.15.5 вылезла ошибка
{Форма.Форма(109)}: Поле объекта не обнаружено (ВидыСтажа)
ВидСтажа = Справочники.ВидыСтажа.СтраховойСтажДляБЛ;
(11) в бухгалтерии нет такого справочника «ВидыСтажа»
У меня еще один вопрос 🙂
В ЗУП есть типовая функция, возвращающая количество лет, месяцев, дней между датами… Зачем изобретать велосипед?!
(13) просвети, плиз, я не в курсе этой функции)
(14)
// Процедура вычисляет количество лет, месяцев и дней между двумя датами
ОбщегоНазначения.РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0)
relax2105, спасибо большое!!! Типовая процедура РазобратьРазностьДат не учитывает високосные года и из-за этого теряются 2 дня… Например, 06.04.1995 и 29.02.1996. Разность между этими датами должна быть равна 10 мес. 23 дня. А типовая процедура насчитывает 10 мес. 21 день. Так что, relax2105, спасибо!!!
lonec, пожалуйста! Рад что кому то пригодилась сия штука))))
а как узнать количество дней в месяце?
желательно запросом
При внедрении ЗУП 8.3 писал обработки для загрузки информации из другой программы. Т.к. ранее учет велся помесячно, написал простенькую функцию для подсчета количества месяцев между датами. Может кому нибудь пригодится…
//Считаем количество месяцев между датами
&НаКлиенте
Функция КоличествоМесяцевМеждуДатами(НачальнаяДата, КонечнаяДата)
МесяцНачальнойДаты = Месяц(НачальнаяДата);
МесяцКонечнойДаты = Месяц(КонечнаяДата);
КоличествоЛет = Год(ТекущаяДата()) — Год(НачальнаяДата);
Возврат КоличествоЛет * 12 — МесяцНачальнойДаты + МесяцКонечнойДаты;
КонецФункции