Список сертификатов на товары. Внешняя печатная форма для УТ 10.3 (Базовая)




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

    Честно говоря это мало кто соблюдает, в основном нужны сами ксерокопии сертификатов а не их названия, так что лучше прикрутить к сериям товара или номенклатуре сами сертификаты, а не их названия. И обработку печати для группового вывода нужных при реализации. Так что минус тебе.

    Reply
  2. zse

    В данном случае требуется именно список. Если бы была нужна групповая печать — была бы групповая печать. Что заявлено — то и показано.

    Reply
  3. wirg

    Интересно, а если сертификатов будет не один, а несколько ты тоже их будешь все выводить? На складе могут быть товары с разными сертификатами к сведению автора, поэтому ксерокопировать все не вариант.

    Reply
  4. zse

    В случае, если одному наименованию товара соответствуют разные сертификаты существует вариант — использовать серии, где, Вы (wirg) и можете увидеть строку — номер и дата сертификата.

    Следовательно, если я НЕ ВЕДУ УЧЕТ ПО СЕРИЯМ, я работаю с полем ДОПОЛНИТЕЛЬНЫЕ ХАРАКТЕРИСТИКИ, что позволяет мне ШТАТНЫМИ СРЕДСТВАМИ получить формы, позволяющие заполнять СЕРТИФИКАТЫ в СПИСКЕ.

    С уважением, zse.

    Reply
  5. Brainman

    (1) У нас больше 30 торговых точек, делать ксерокопии для всех, а потом отслеживать их актуальность та еще нервотрепка. Используем аналогичную разработку, правда под v7.7. количество штрафов существенно снизилось. Так что +

    Reply
  6. marina-daniel

    Плюсик поставила, попробовала, понравилась. Теперь жду, что наши бухгалтера скажут. А по мне так нравиться

    Reply
  7. vizov1C

    Чуть чуть доработать шапку — но это уже сами.

    Reply
  8. kishbb

    ДЛЯ <wirg> !!!!!! …»поздравляю Шарик, ты …»…

    а если в накладной порядка 40-50 позиций товара????, и все разные????, и от разных приходов????, а если порядка 100 клиентов???? а раз в неделю такая накладная????тогда что делать прикажете????? работать на бумажную промышленность???? НЕТ г-н wirg Вы не правы!!! сто раз не правы….или одна бумажка, или 50…и только на одного клиента….а их сто…»почувствуй» разницу??? к тому же, сударь, поверьте продажнику, клиент всегда попросит, и не то что попросит, а вырвет копию сертификата, если это потребуется ему…. к сжалению сам не качал т.к. пользую 7.7 и такой обработки у мну нет, но это вещь нужная, всегда хотел такое… так что + жирный…заочно!!!может когда и перейдем на 8.0

    Reply
  9. Helga_love

    А для 1С ТиС 7.7 существует что-нибудь подобное?

    Reply
  10. likbez1c

    Во всяком случае технических проблем нет.

    Reply
  11. maratius

    Огромное спасибо! Жирный ПЛЮС тебе! Это именно то, что нужно.

    Некоторые наши клиенты требуют с КАЖДОЙ поставкой перечень сертификатов. За неимением оного приходилось изводить кучу бумаги на копии живых сертификатов.

    Прикрутил. Чуть подкорректировал. Выдохнул со спокойной душой. ).

    Reply
  12. CheBurator

    (9) существует

    Reply
  13. CheBurator

    (11) предоставление копий сертификатов с каждой поставкой — не есть «правильно» — в огромном количестве случаев это нафиг не надо — и клиенты могут быть посланы «в сад» — причем зачастую они сами не могут сказать нафига им эти копии сертификатов…

    .

    для обоснованного посылания «в сад» — читаем «письмо государственного комитета РФ по стандартизации и метрологии от 22 сентября 2000г. №ИК-110-19/3022)»

    Reply
  14. CheBurator

    на основании этого письма — разослали всем клиентам — сказали «в сад» — копию сертификатов даем только первый раз для товара (типа когда к клиенту идет товар первый раз) — экономия на бумаге и тонере получается офигительно-потрясная…

    Reply
  15. CheBurator
  16. CheBurator

    +(14) и самое главное — никто из клиентов не выступает…

    Reply
  17. CheBurator

    (0) Автору: скриншоты хорошо бы нормального размера…

    Reply
  18. simba08

    Для моих клиентов подошла форма полностью. Скачал, печатается — все рады))) Так что плюс.

    Reply

Leave a Comment

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