Заказ-наряд для автосервиса. Печатная форма для 1С:Бухгалтерии 8.2




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

16 Comments

  1. Altair777

    а в чем тут фишка?

    в печати реквизитов VIN, Год выпуска, Гос №, Двигатель №, Кузов №, Модель, Пробег в шапке?

    Reply
  2. olgabel

    Форма бесплатная, публикую здесь только для тех кому она нужна. Если Вам не нужна, просто удалите. 🙂

    Reply
  3. Altair777

    это радует, что бесплатная 😀

    Reply
  4. olgabel

    Извините, на профи не претендую, я новичек.

    Reply
  5. Altair777

    Вы так и не ответили на вопрос из 1

    Reply
  6. olgabel

    Что такое фишка? Ведь такой формы в программе нет, а нам она была нужна, вот и сделали. Доплнительные реквизиты в шапку добавили, и нормо-часы в услуги.

    Reply
  7. Altair777

    (6) сделали, так сделали

    но это не повод засорять ресурс таким

    Reply
  8. AlexSm2010

    Огромное спасибо! Как раз нужна была такая формочка. 😉 Все работает!

    Reply
  9. vladen

    Разработка действительно простенькая. но радует что новичок («на профи не претендую, я новичек») понимает ценность типовой конфигурации. а то на моём пути столько «программеров» было, что по несколько раз переписывали типовой функционал в разных интерпретациях. А тут все аккуратненько — через свойства. Молочинка, что не поленилась и не добавила дополнительные объекты в документ.

    Забавно то что я, только пару дней назад сделал аналогичную форму у себя. Названия доп. свойств почти один в один 🙂

    Reply
  10. astasya

    olgabel,

    Подскажите, не могу никак сделать так чтобы писал НДС. Подскажите как сделать или где найти такую же форму, но с НДС.

    Reply
  11. brun_murk

    При закрытом модуле от этой печатной формы толку мало. Сама по себе печатная форма документа не унифицирована, клиентам может не понравить то или это. А если ее нельзя подредактировать, то и кому она нужна? Все равно все прийдется написать с нуля. Когда напишу, обязательно выложу.

    Reply
  12. tzmurkina

    Спасибо за формочку! Пригодилось!

    Reply
  13. Muzik81

    Полезная вещь, но закрывать конечно не надо… не больно то и серьезный там код

    Reply
  14. Dimkasan

    Печатная форма оказалось полезной, некоторые решения тоже понравились (про доп реквизиты, например). Но, действительно, зачем закрывать код? тем более, что открыть его не сложно, но ведь осадочек остается 🙂

    Reply
  15. shira84

    Пригодилось, хоть и пришлось ломать код.

    Reply
  16. Strannik99

    Народ , ни у кого под ут 10.3 нет такой обработочки?

    Reply

Leave a Comment

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