Трудовой договор УПП, КА, ЗУП




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

23 Comments

  1. жизнь

    не работает 🙁

    Reply
  2. rsveta

    Прекрипила к справочнику сотрудник , печатает, тольго пишет г. Уфа

    И в низу Название организации вместо названия

    Reply
  3. Hydra

    В HTML печатается жестоко, но подход как минимум забавный.

    Только запрос бы еще параметрами нагрузить — и красота.

    Reply
  4. kloser

    Обработочка понравилась. Вот только у меня небольшая проблема. В виде расчета «Оклад по дням» стоит требовать ввода тарифного разряда. Хотелось бы сумму получить из разряда, только как запрос обработать. Что то никак не выходит. Может поможете?

    Reply
  5. Фред

    Для Бухгалтерии прдприятия сгодится?

    Никто не пробовал?

    Reply
  6. ctrlf4

    Думаю нужно скачать и попробовать, вот только не хватает денег на скачивание, сейчас напишу, скачаю наверное и попробую. Спасибо за обработку, буду пробовать!

    Reply
  7. RakovskiyK

    интересное решение, но:

    необходимо вручную менять город, дату. И вообще убивают колонтитулы, коих быть в договоре просто не может.

    Reply
  8. d.snissarenko

    колонтитулы убираются при печати, город и дата — были требования под них оформил.

    Идеальный вариант, использование Поля форматированного документа, но оно только для УФ, поэтому использовать как внешнюю печатную форму не получится, но на печать в итоге тоже выводится html с колонтитулами.

    Reply
  9. RakovskiyK

    По крайней мере все работает и есть возможность допилить до почти идеального варианта! Спасибо! =)

    Reply
  10. Serjeo

    А на 1с 8.2 конфигурация Комплексная автоматизация 1.1.12.1 будет работать ?

    Reply
  11. d.snissarenko

    Конечно.

    Reply
  12. MYRZILKA123

    Спасибо больное за печатную форму она мне сейчас очень пригодилась!

    Reply
  13. vovkakursk

    Очень хороший отчетик!

    Reply
  14. vovkakursk

    А как убрать колонтитулы?

    Reply
  15. ZZnOB

    При изменении текста договора происходит что то чудесное. На сколько я понимаю, Договор может быть любого содержания, нужно лишь в нужных местах ставить записи типа [#ВидДоговора] [#МестоРаботы] и т.д. . Но при внесении изменений данные теги не обрабатываются, вопрос «Почему?».

    Reply
  16. d.snissarenko

    Я думаю нужно в коде посмотреть, т.е. если вы их вставляете в текст договора , то в коде должно быть что-то, типа

    СтрЗаменить (ТекстДоговора, «[#ВидДоговора]», Ссылка.ВидДоговора)

    Reply
  17. Alexey55

    Спасибо!

    Пригодилась

    Reply
  18. ZZnOB

    (16) так и есть. Все без ошибок, точно так же как в коде. Но иногда данную переменную не обрабатывает. Заметил закономерность, а точнее зависимость от шрифта. То есть, если переменная написана шрифтом как во всем документа и таким же размером, то все нормально обрабатывается. Но если изменить размер или просто дописать еще 1 такую переменную, то она не обрабатывается (заменяется). Вот такие чудеса. А в целом обработка архинужная!

    Reply
  19. RakovskiyK

    еще раз спасибо! очень пригодилась!

    Reply
  20. alma-soft

    Спасибо за обработку, на ее основе удалось решить локальную проблему по формированию доп.соглашений к договорам для УТ, рекомендовать могу только расширение функций отбора и параметров.

    Reply
  21. fid77@mail.ru

    Основной или дополнительный отпуск можно подтягивать с должности. А так для упрощения формирования договора с «нуля» подойдет. Скачал, но в итоге все сделал по своему ). Автору спасибо.

    Reply
  22. AlexO

    (0) позабавило из описания «обновлены ошибки» — дескать, кто забыл, а вот они, снова воспроизведены :)))

    По обработке — она полностью «ручная» что ли? т.е. все поля заполнять ручками?

    просто использован html-документ, и все?

    Reply
  23. rassss

    автору спасибо за труд в выкладывание обработки сюда,а надо заментить это не все так просто.но давайте будем объективны , действительно тут получаеться полностью ручное заполнение что надо заметить не являеться положительными характеристиками для данной обработки. но как уже сказли выше для оформление договоря с нуля обработка можно сказать нужна…, так что еще раз повторюсь автору спасибо за труд…)))))))))))))))))))))))))))))!!!!!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *