Бланки по иностранным рабочим с открытым кодом




Принцип обмена данными из 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='\

18 Comments

  1. Арчибальд

    Не увидел, зачем было лезть в конфигуратор…

    Внешний отчет + СохранитьЗначение/ВосстановитьЗначение решает проблему…

    Автор, объяснись. У многих ведь аллергия на неоправданное конфигурирование

    ВооОоттАкоеМнеееЕение….

    Reply
  2. Myxa

    Добрый день! Скорее всего Вы правы… В связи с тем что не все глюки еще

    исправлены и еще будут добавлятся новые бланки, скорее всего переделаю ее с

    учетом Вашего совета. Спасибо!

    Reply
  3. gutentag

    (1) Согласен, тем боле что можно сделать «закладку» во внешеней обработке, где бы и хранились все необходимые данные.

    Reply
  4. galca

    Добрый день! Подскажите пожалуйста на закладке иностранец формы регистрации или при увольнении при нажатии пишет: «Индекс не входит в границы списка значений» что это?

    Reply
  5. Myxa

    (5) Не заполнена константа «Сотрудник, предоставляющий сведения об иностранцах».

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

    Reply
  6. Myxa

    (5) Обновил…

    Reply
  7. monolit2

    Отличная вещь!!! Жаль, что у меня 8-ка. А то тоже нужна очень. Купили бы обязательно.

    Reply
  8. Nicholas

    Хорошая задумка. Плюсану.

    Reply
  9. aparnikov_ve

    Сотрудника в константах заполнил, а все равно Индекс за пределами значения. Еще и формы обновились (приложения 3, 5, 9, 10 к Приказу ФМС России от 28.06.2010 № 147).

    Reply
  10. Myxa

    (10) Добрый день! На счет обновленных форм — о том, что они изменились узнал только сегодня от Вас. На момент написания данной доработки в силе были еще старые формы. В ближайшее время постараюсь обновить и, соответственно, раз и навсегда 🙂 решить проблему с «индексом за пределами значения». Просто когда проблема возникла в первый раз, я ее локализовал на частных случаях (у тех, для кого изначально разрабатывались эти отчеты) и в дальнейшем проблема не возникала. Как видно осталась 🙁

    Reply
  11. aparnikov_ve

    (11) Нашел косяк индекса. Ему не понравился адрес организации не в формате ФНС. Проставил в формате ФНС все пошло. осталось сделать формы. Спасибо.

    Reply
  12. Myxa

    109 скачиваний и так мало «+»… 🙁

    Reply
  13. Alexpluss

    Добрый день! Попытался встроить в свою рабочую типовую конфигурацию. Все отлично получилось. Пытаюсь открыть сотрудника в справочнике сотрудники, выдает сообщение

    Ошибка при открытии кодированного потока.

    Если ошибка повторится, обратитесь к разработчику.

    Stream = eSubconto_Number16

    Попытался открыть Дополнительные настройки, выдает ошибку

    Ошибка при открытии кодированного потока.

    Если ошибка повторится, обратитесь к разработчику.

    Stream = eCalcVar_Number5420

    В демонстрационной скаченной базе все работает, получается нельзя встроить к себе эти настройки?

    Reply
  14. Muhin555

    Скачал сегодня(26.12.2010) хотел посмотреть…. А увы, закончилась лицензия КЗК…. Так что, либо в помойку пример, либо обновить надо демофайлик….

    Reply
  15. Myxa

    Добрый день всем! Выложил демо-базу с открытым (незакодированным) кодом и всеми бланками. Удачной работы всем!

    Reply
  16. nvl

    Спасибо большое! Хоть не рисовать уведомление о прибытии. Это же куча времени сэкономленного!!!

    Reply
  17. codewriter

    Если Вам нужны миграционные формы для 1С:Зарплата и Управление Персоналом 8, то Вы можете их найти в решении «Модуль «Миграционный учет» для 1С:ЗУП 8» http://infostart.ru/public/115712/

    Reply

Leave a Comment

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