Просмотр файлов разных форматов (PDF, DOC, XLS, MXL, видео, картинок и др.) в управляемой форме 1С




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

27 Comments

  1. DrAku1a

    Судя по коду, зато надо иметь установленный MS Word и MS Excel. Также, как и затянуть в OLE-Object медиаплеер (ну хоть он то наверняка есть).

    И не понятно — КАК открываются при этом PDF?

    Reply
  2. sss123

    (1) DrAku1a,

    MS Word и MS Excel нужен. Это я отмечал:

    — Файлы Excel (*.xls;*.xlsx). Excel должен быть установлен на клиенте

    — Файлы Word (*.doc;*.docx). Word должен быть установлен на клиенте

    Медиаплеер и Adobe Player установлены. См. публикацию Жизнь на Марсе и ActiveX в тонком клиенте Windows 1C


    Приведем список самых популярных безопасных ActiveX:

    MS Media player 9 — 6BF52A52-394A-11d3-B153-00C04F79FAA6

    MS Media player 6.4 — 22D6f312-B0F6-11D0-94AB-0080C74C7E95

    Adobe Player — D27CDB6E-AE6D-11cf-96B8-444553540000

    Adobe PDF — CA*A9780-280D-11CF-A24D-444553540000

    Они у вас включены по умолчанию.

    Reply
  3. mnemchinov

    Word не взлетел…

    Reply
  4. sss123

    (3) mnemchinov, А Excel ?

    Reply
  5. AxiLLes89

    День добрый!

    Файл *.tif пытаюсь просмотреть, открывает только первую страницу, а в файле 5)

    Это как-то правится?

    Reply
  6. sss123

    (5) AxiLLes89, Добавил разбор *.tif на фреймы

    Reply
  7. ArtfulCrom

    Это на маке в вэб клиенте тоже отработает? Частично отработает?

    Reply
  8. sss123

    (7) ArtfulCrom, Могу выслать Вам обработку для тестирования

    Reply
  9. Mr.Smith

    (8) Добрый день. Каким образом реализовать запрет на сохранение файлов на диске пользователя?

    Reply
  10. m.nikulin

    Добрый день! На веб-клиенте работает?

    Reply
  11. qazaz2

    PDF предложило открыть во внешнем приложении, т.е. в форму обработки не залилось.

    Чета приуныл…

    Reply
  12. sss123

    (11) Какой клиент?

    Reply
  13. qazaz2

    (12) Тонкий, 8.3.8.1784

    Reply
  14. sss123

    (13) Откройте PDF в IE. Если предложит открыть во внешнем приложении, установите http://get.adobe.com/reader

    Reply
  15. qazaz2

    хм, попробую,

    пару дней буду далеко от компа, отпишу по результату

    спасибо

    Reply
  16. romankoav

    (15)Получилось?

    Reply
  17. qazaz2

    Не, заказчика устроило открытие внешнего приложения.

    Reply
  18. b-dm

    Крутая вещь. если и правда работает 🙂

    Reply
  19. dinopopyys

    https://infostart.ru/public/785147/ — БЕЗ АКТИВИКСОВ

    Reply
  20. user888347

    Обман же, нету там pdf — закомментировано.

    Reply
  21. sss123

    (20) Смотрите комментарии.

    pdf работает без дополнительной обработки, по Иначе

    Reply
  22. Pilokarpios

    При открытии обработки

    {(60,20)}: Процедура или функция с указанным именем не определена (ПолучитьИмяВременногоФайла)

    ВременныйФайл = <<?>>ПолучитьИмяВременногоФайла(«.html»);

    {(67,20)}: Процедура или функция с указанным именем не определена (ПолучитьИмяВременногоФайла)

    ВременныйФайл = <<?>>ПолучитьИмяВременногоФайла(«.html»);

    Reply
  23. sss123

    (22)

    ПолучитьИмяВременногоФайла

    Какая платформа и конфигурация?

    Reply
  24. user606526_delta_cr

    Пытаюсь реализовать на основе вашей публикации. При смене изображения с pdf на любой другой тип, 1с падает в дамп. Ругается на AcroPDFImpl.dll. Как я понимаю, этоболячка относится к IE7, используемому в 1с. Как вам удалось обойти эту проблему?

    Reply
  25. sss123

    (24)

    Какой Windows и версия платформы 1С? 32 или 64 бита и тот и другой? Попробую смоделировать.

    Reply
  26. user606526_delta_cr

    (25) ОС Windows Server 2008 R2 standart 64 (серверная, файловая база) а также воспроизводится на Windows XP SP3 32

    Платформа 8.3.9.

    На 8.3.10 вылезает ошибка при обработке docx файла:

    Ошибка при вызове метода контекста (Формат)

    Если Не К.Формат() = ФорматКартинки.НеизвестныйФормат Тогда

    по причине: Неизвестный формат картинки

    Гуглинг по имени библиотеки выдает, что это стандартная ошибка IE версии ниже 10. А в 1С IE7

    Reply
  27. user606526_delta_cr

    И да, расскажите или дайте ссылку, где посмотреть как выводить tiff. Похоже тоже придется выводить

    Reply

Leave a Comment

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