<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Файл pdf еще можно хранить в базе, в реквизите типа ХранилищеЗначения, каком-нибудь справочнике, потом получать на него навигационную ссылку, и эту ссылку подставлять в тег. Это вариант для веб-клиента.
(1) 1c-intelligence, Спасибо
Как я знаю веб клиенты могут открывать и локальные файлы
Например путь к локальному файлу «new 2.txt» для веб клиента (например Хром) будет выглядить как:
Может и у Вас так получится открывать локальные PDF.
Для тонкого клиента, когда файл хранится где-то в хранилище значения, можно при открытии формы писать его во временный файл, и в поле html уже ссылаться на временный файл. При этом поле html разбирается даже без расширения файла, что это pdf и нормально его показывает.
учитесь обрабатывать файлы на сервере. Используйте ВременноеХранилище.
В нашей конфе мы тоже пользует ПолеHTMLДокумента для отображения всяких картинок и pdf
HTML код для реквизита формы
previewTAG — меняется в зависимоти от типа вложения, если pdf, то передаем туда
АдресВременногоХранилища — в свою очередь содержит в себе реальный АдресВременногоХранилища полученые методом глобального контекста ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)
При использовании Временного Хранилаща — вам не нужно хранить временные файлы ан сервере!
(5) нормальный такой,
с pdf-все ок. А как быть с mht-файлом? Какой тип этого embed? Может кто в курсе?
«Объекты ActiveX недоступны для размещения в управляемых формах» — не верьте 1C.
<OBJECT> — и есть ActiveХ объект в НТМL поле, которое в Winodws само является ActiveX
Использую (5) нормальный такой, все отлично, но есть необходимость отключить показаз pdf-линейки с кнопками ( в том числе сохранение файла) . Нет ни у кого решения на эту тему ?
интересное решение, иногда нужно через веб-1с отображать различные документы
Неожиданно перестал отображать в поле XTML следующий код «<EMBED width=100% height=100% type=»application/pdf» src=»C:UsersUSERAppDataLocalTemp2v8_6C52_1a.pdf»></EMBED>» Возможно после установки платформы 8.3.9, проверить не могу. Через iframe все работает, т.е. вот так «<iframe src=»C:UsersUSERAppDataLocalTemp2v8_6C52_1a.pdf»></iframe>. Но iframe отображает pdf в отдельном окне, запуская акробат. Заворачивал embed в object то же самое. Не показывает файл и все. Настройки IE не менялись. Есть идеи?
(10) аналогичная ситуация. Причем клиенты не жалуются, значит, у них все нормально открывается. А у меня пустое окно. IE11
с iframe работает
А xls так смотреть можно? хочется чтобы оператор перед тем как отправить файл на регламент визуально убедилась что он именно от нужного поставщика
(12)
Для обычных форм (хитрая, конвертирует exel или word в PDF и аналогично как тут показано его можно выводить на экран для предварительного просмотра)
Для управляемых форм (но она не идеальная, но открывает прямо ворд допустим в окне 1С, нужно быть админом на компе как понимаю).
Вместо просмотра открывается сохранение файла. Что я делаю не так?
(5)
ПоместитьВоВременноеХранилище(<Данные>, <Адрес>) — какой тип у параметра <Данные>?
Спасибо!
(8) удалось убрать эту линейку с кнопками в итоге? сейчас сам столкнулся с этим
(17) ну Вы проснулись почти через 4 года )) Да уж не помню справился или нет… скорее всего справился , но как именно мой головной мозг уже не помнит.
На обычном клиенте все работает нормально. а на web клиенте показывать pdf отказывается
(19) Значит вы что-то не по мануалу сделали, у коллег работает. Задайте на форуме вопрос с описанием действий для воспроизведения. Здесь в комментариях вы указали недостаточно информации, чтобы что-то подсказать по теме.
(20) Делаю собственную конфигурацию под свои нужды. появилась необходимость отображения документа (в будущем и других) в поле HTML.
На толстом клиенте все отображается замышательно
когда открываю на web клиенте то ничего не отображается пишет «Не удалось загрузить PDF-документ.»
в поле html передается ссылка <ht ml><EMB ED id=’PDF’ width=100% height=100% type=»application/pdf» src=»e1cib/data/Документ.РаботаСКандидатом.ДанныеРезюме?ref=b8fab42e991711d511e96b2bd81ec6db»></EMBED></html>
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
АдресМ = ПолучитьНавигационнуюСсылку(Объект.Ссылка,»ДанныеРезюме»);
//#Если ВебКлиент Тогда
//АдресМ = ПолучитьНавигационнуюСсылкуИнформационнойБазы()+»/#»+ ПолучитьНавигационнуюСсылку(Объект.Ссылка,»ДанныеРезюме»);
//#КонецЕсли
//сообщить (АдресМ);
#Если ВебКлиент Тогда
Если Не ПодключитьРасширениеРаботыСФайлами() Тогда
УстановитьРасширениеРаботыСФайлами();
ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
#КонецЕсли
Реквизит1 = «<ht ml><EMB ED id=’PDF’ width=100% height=100% type=»»application/pdf»» src=»»»+АдресМ+»»»></EMBED></html>»;
сообщить (Реквизит1);
//Реквизит1 = АдресМ;
КонецПроцедуры
В чем может быть проблема, может кто сталкивался. Спасибо заранее.
Можно использовать и такой вариант…
(5)
Т.е. временное хранилище не хранит файлы на сервере?
(22) На IE8 для base64 ограничение в 32Кб
(24) там как раз для IE Base64 перегоняется в blob, а для остальных Base64
(5)Добрый день.
На платформе 3.8.14 или 3.8.15 удалось отобразить pdf? Код приведенный выше работает в 3.8.13 и ниже, а начиная с 14 версии нет.
(10)
Добрый день.
Подскажите на платформе 3.8.14 — 3.8.15 пробовали сделать просмотр pdf?
На 3.8.13 работало из через iframe и без, а после перехода на 3.8.15 получаю вот такую картину (см. скрин)
(27) Добрый день, решение не нашли?
(28) Добрый день.
1С отказались от IE и перешли на WebKit, теперь pdf теги object и embed я так понял что не работают, либо не работают для pdf.
По этой ссылке есть обработка внизу для просмотра — она не слишком функциональная, но думаю стоит копаться в этом направлении. Тоесть писать свой просмотрщик pdf на html+js, к примеру там используется библиотека pdf.js.
На данный момент пытаюсь переписать пример от pdf.js — .
(28) Раньше сталкивался с этой проблемой. Все оказалось очень просто. Проблема в 64 битном клиенте. Поставьте 32 и будет счастье