Формы Т-10, Т-9 и Т-10а для ЗиК 7.7




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

13 Comments

  1. inko

    А где файлы и куда смотреть? 😀

    Reply
  2. kivduts

    Странно вроде крепил, ну теперь точно есть.

    Reply
  3. kivduts

    (1) Смотри прикрепил.

    Reply
  4. dm0575

    нет файла 😥

    Reply
  5. kivduts

    (4) Не понимаю вроде ставлю файл, а он не крепится. Может делаю чего не так. Давно не размещался.

    Reply
  6. kivduts

    (4) (1) Разобралси. Раньше ГУГЛ так не гнал.

    Reply
  7. апостол

    Не понимаю, зачем делать отдельную обработку, когда можно уже в существующий документ «Оплата по среднему заработку» добавать печатные формы!!!! И в модуль внести пару строчек и все.

    Reply
  8. kivduts

    (7) Ну эта мысль у меня была, особенно если учесть то, что я её не делал, то ваше замечание бессмысленно. Вот когда набирусь достаточно опыта в работе прогера по 1С, пройду оставшиеся курсы, вот тогда буду выкладывать более интересные вещи.

    Reply
  9. апостол

    (8) т.е. обработку не ты писал? так я понял?? если все же ты, то в принципе молодец, но знаешь как говорил мой препод по 1с ненадо изобретать велосипед, когда можно доработать, то что есть. хотя точто ты только учишся респект тебе.

    Reply
  10. ivnik

    (9) Если «вмешиваться» в Типовую, тогда при обновлении релиза каждый раз нужно «изобретать велосипед»?

    Reply
  11. апостол

    (10) Твоя правда, но только от части. Ты много знаешь контор которые используют типовую конфигурацию???! Для большенства фирм типовая конфа дорабатывается, и тут только вопрос в том, умееш ли ты, обновлять нетиповые конфигурации? И притом, если учесть, что речь идет о конкретном документе, а именно «Оплата по среднему заработку», так за последнии 5-6 релизов данный документ никаких изменений не притерпел. Так,что читай что в новом релизе добавленно то и объеденяй, а остальное нет смысла.

    Reply
  12. ivnik

    (11) Я всегда стараюсь делать доработки Типовой методом ДОБАВЛЕНИЯ, а не Изменения!!!

    В моей настройке Конфигурации очень много доработок, при этом ее можно обновлять Типовым релизом и все Мои доработки остаются РАБОТОСПОСОБНЫМИ!!! 🙂

    Reply
  13. IrKo

    😳 Большое спасибо — вещь нужная, только не понятно, как «вводом адреса» пользоваться? Вроде заполняешь и в формате ФНС и в произвольном, а после формирования печатной формы — все пусто….

    Reply

Leave a Comment

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