<?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. В режиме 1С: Предприятия выбрать пункт меню «Файл» — «Открыть», выбрать файл обработки, в открывшейся форме выбрать документ, нажать на кнопку «Выполнить».
2. В режиме 1С: Предприятия выбрать пункт меню «Сервис» — «Внешние печатные формы», добавить новую печатную форму. (краткое описание механизма внешних печатных форм можно получить нажав на кнопку «?» или на диске ИТС).
А зачем велосипед то изобретать? есть же в типовой печатная форма..
Если в ссылке на объект указать другой тип, потом не возможно его изменить, и второе не совсем понял чем не устраивает типовой по кнопке печать
Да, вы совершенно правы — в типовой конфигурации действительно есть отчет «Табель учета рабочего времени Т-13». Проблема в том, что отчет заполняется по данным нескольких регистров и совсем не тривиальным (для меня) образом. В итоге данные занесенные в табличную часть документа в отчет либо не попадают, либо попадают в искаженном виде. Решением стала представленная внешняя печатная форма. Решение, может быть, не совсем правильное (все-таки, правильнее использовать реализованные в конфигурации механизмы), но в моем случае более экономичное к моему времени и времени пользователя.
Чтобы изменить тип, можно воспользоваться сочетанием клавиш <shift>-<F4> для очистки поля ввода. Предпочтительнее пользоваться обработкой используя стандартный механизм подключения внешних печатных форм.
Работает, но выдает не правильные цифры. версия ЗУП 2.5.9.2
Часы задвоены, дни задвоены.
Пожалуйста, опишите ситуацию подробнее.
И кстати: ФамилияИнициалыФизЛица вроде в модуле ОбщегоНазначения…
К сожалению, по не понятным мне причинам, при смене релиза процедуры «кочуют» из одного общего модуля в другой… Но к счастью, адаптировать обработку, на мой взгляд, достаточно легко… 🙂
В надежде, что кому-то это будет полезно, выкладываю более свежую версию…
Молодчина !! Для тех, кто ведёт табельный учёт — незаменимая вещь, т.к. штатный отчёт полностью неработоспособен !
Класс!
Плюсище огромное.
А то со стандартом упарился.
Тока все равно придется подгонять под требования свои.
Подскажите, плиз, а как сделать чтобы выходные тоже выводились?
Спасибо!
Спасибо! В УПП тоже работает!
Спасибо, запарился бухам выправлять этот зупище ))
Спасибо!
Нужная вещь!
Очень нужная вещь
Спасибо, очень пригодился. Осталось только немного переделать под себя.
Спасибо автору, будем пользоваться.
Спасибо Огромное!!!!
хм… а ночные зачем суммируются в итогах?? они и так в том числе входят в явку
Спасибо, пригодилась!