[PDF Viewer] — Просмотр PDF в 1С




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

57 Comments

  1. Ёпрст

    Это, по скорострельности быстрее, чем активикс от фоксридер или адоберидер ?

    Reply ↓
  2. Душелов

    Фоксридер или фоксит ридер?

    Фоксит, наверное быстрее будет, хотя не знаю…

    Но могу сказать, что быстрее адобе (и дешевле 😉 )

    Фоксит в 1Су встроить можно? У адобы есть активикс свой.

    Reply ↓
  3. Ёпрст

    (2) фоксит .. можно.:)

    Reply ↓
  4. Ёпрст

    Блин.. нет ставить на сервак неохота 🙁

    Ладно, попробую потестить на на локальной тачке..

    Но если ужо быстрее адобе, то +

    Reply ↓
  5. brr

    А в 7.7 ведь можно просмотреть пдф без активиксов, через картинку. В чем плюсы использования активикса автора?

    Reply ↓
  6. Душелов

    (5) Как?

    Reply ↓
  7. brr

    На таблицу помещаем рисунок, в свойстве Текст пишем

    ПриВыводеКартинки(Таб.ТекущийОбъект,Файл) , где Файл — переменная хранящая путь к пдф, в модуле соответственно процедура:

    Процедура ПриВыводеКартинки(Картинка,Файл)

    Картинка.РежимРисования(1);

    Попытка

    Картинка.Загрузить(Файл);

    Исключение

    Сообщить(ОписаниеОшибки());

    КонецПопытки;

    КонецПроцедуры

    Код не мой, рабочий.

    Reply ↓
  8. Ёпрст

    (7) Гы.. Какая наивность…

    Reply ↓
  9. Ёпрст

    +8 Сам то хоть раз пробовал ?

    :))))))))))))))))))))))

    Reply ↓
  10. Душелов

    Я наверное что-то упустил в 7.7…

    Reply ↓
  11. Ёпрст

    (10) Нет. Штатно pdf не вывести.

    Reply ↓
  12. Sla

    супер!

    предложение — сделать масштабирование (100%, по ширине, страница целиком)

    Reply ↓
  13. Душелов

    (12) Автомасштаб автоматически работает при растягивании формы.

    Добавил свойство «Масштаб» для ручной установки масштабирования.

    Reply ↓
  14. Ёпрст

    (13) Мот добавишь метод LoadFromFile … ?

    чтоб при открытии формы сразу открывался нужный pdf…

    Reply ↓
  15. Ёпрст

    Ё… уже добавил …скоростной.

    Reply ↓
  16. trufela

    Спасибо

    Reply ↓
  17. allexor

    Классно!

    Есть предложение — добавить функции редактирования файла pdf, или программно заполнять определенные поля в pdf

    Reply ↓
  18. brr

    (9) Ага, не загружает. Плюс автору.

    Reply ↓
  19. Душелов

    (17) Для редактирования берем активикс от адобе (про версии) и читаем мануал по его методам.

    Reply ↓
  20. hame1e00n

    Клево, спасибо, плюсую

    Reply ↓
  21. allexor

    (19) а где взять то активикс от адобе (про версии)???

    Reply ↓
  22. Душелов
  23. ge_ni

    Просто спасибо!!!

    Reply ↓
  24. bookworm1c

    (2)На фига «погремушка», если пишете , что она фиговая?

    Reply ↓
  25. Душелов

    (24) Какая такая «погрумушка» и где она «фиговая»?

    Reply ↓
  26. Душелов

    * погремушка

    Reply ↓
  27. voler
    Reply ↓
  28. voler

    Ошибка лезит на WinXP SP3

    Reply ↓
  29. WERY_NOOB

    для iPhon`а точнее для одного из его прибабахнутых приложений на ПК нужен framework 3.5 sp1 так вот эта штука жутко ругается на компоненту

    Reply ↓
  30. poirus

    Попытался поставить начала ругаться, у меня стоит 3 net. Но вопрос не в этом у меня задача простая надо сделать импорт из pdf файла обшарил все что можно это единственная компонента которая хоть как-то работает. Может кто подскажет команду чтобы через shell сразу конвертнуть в txt. Программ таких куча, но вот не задача все они крайне плохо переводят в текст. Если это делать руками в adobe reader то получается гораздо лучше. Есть ли возможность сделать это через эту компаненту но автоматизированно а не по нажатию кнопки сохранить как текст

    Reply ↓
  31. johnZZZ

    не могу понять как повесить на форму. Вродь все поставилось все прописалось в реге но работать не хочет. 1С 7.7 релиз 27. Может кто кинет .ert с кодом подкльчения!!!!???????

    Reply ↓
  32. johnZZZ

    не могу понять как повесить на форму. Вродь все поставилось все прописалось в реге но работать не хочет. 1С 7.7 релиз 27. Может кто кинет .ert с кодом подключения!!!!???????

    Reply ↓
  33. johnZZZ

    не могу понять как повесить на форму. Вродь все поставилось все прописалось в реге но работать не хочет. 1С 7.7 релиз 27. Может кто кинет .ert с кодом !!!!??????? Очень надо, стоит работа.

    Reply ↓
  34. IronDemon
    Reply ↓
  35. lex81
    Reply ↓
  36. Spacer

    Есть такие пожелания, думаю несложные для доработки, но полезные:

    1. Добавить свойство в котором хранится полный путь к загруженному файлу.

    2. Добавить метод СохранитьДокумент() для программного сохранения в нужном формате.

    Reply ↓
  37. DemonFM

    Windows 7 32 bit не подключается. Несколько раз пробывал регистрировать, не получилось. Что делаю не так?

    Reply ↓
  38. 1cmax

    вот такая ошибочка. что может означать

    мПутьКФайлу — тип строка, путь к файлу

    мПолеКартинки.ЗагрузитьДокумент(мПутьКФайлу);

    Произошла исключительная ситуация (Dushelov.PDFViewer1C): Object reference not set to an instance of an object.

    Reply ↓
  39. 1cmax

    какбэ есть соображения на тему?

    Reply ↓
  40. macbeth

    (38) DemonFM, Возможно нужно из под Админа. Могу ошибаться

    Reply ↓
  41. DemonFM
    macbeth

    (38) DemonFM, Возможно нужно из под Админа. Могу ошибаться

    Пробывал не проходит. Даже вручную из консоли пытался зарегистрировать, два экрана ошибок….

    На Win Server 2003 x64 зарегистрировалась, но вызывает ошибку как в сообщении (30). Net FrameWork 3.5 удалять не планируем.

    есть решение проблемы?

    Reply ↓
  42. Sasha255n

    Вообще теоритически вещь нужная теперь пробую как подключть к своей базе

    Reply ↓
  43. gentle

    (39) 1cmax? вы решили эту проблему?

    Reply ↓
  44. 1cmax

    Уже не помню.. )))

    Reply ↓
  45. mikhailv

    Win 7 x64: вываливает ошибки при переходе по закладкам документа.

    Программного метода Найти() нет.

    Не подошла.

    P.s. за 5 лет ни одного коммита?

    Reply ↓
  46. Ёпрст

    (46) Автора нет в живых уже давно. Коммитить некому

    🙁

    Reply ↓
  47. MadDAD

    (46), (32)

    Немного доработал. Добавил программный поиск. Добавил пример использования под 7.7

    Поиск:

    мПолеКартинки.Найти(СтрокаПоиска, Сначала, ТочноеСовпадение, ПоВсемуДокументу, Следующий, ОбратныйПоиск);

    Reply ↓
  48. MadDAD

    исходники на GitHub — https://github.com/DmitryDreytser/Dushelov.PDFViewer1C

    Reply ↓
  49. CheBurator

    (49) спсб!

    Reply ↓
  50. user1156120

    Скачал Dushelov.Pdf1C.zip, запускаю reg.bat, появляется ошибка:

    RegAsm : error RA0000 : Could not load file or assembly Dushelov.PDFViewer1C.dll or one of its dependencies. Operation is not supported…

    Подскажите в чем может быть ошибка?

    Reply ↓
  51. user1156120

    И вопрос к MadDAD. Как с Вами связаться, чтобы получить от Вас помощь… Пробовал написать Вам через этот форум но сообщение не отправляется!

    Reply ↓
  52. MadDAD

    (52)

    И вопрос к MadDAD. Как с Вами связаться, чтобы получить от Вас помощь… Пробовал написать Вам через этот форум но сообщение не отправляется!

    Я тут не часто бываю.

    Что-нибудь конкретное про зависимости пишет?

    В комплекте идет библиотека «PDFLibNet.dll» она должна располагаться рядом с «Dushelov.PDFViewer1C.dll»

    Т.е. нужно весь комплект полностью распаковать в один каталог.

    Reply ↓
  53. user1156120

    А можно Ваш e-mail? Я бы хотел за денежку к Вам обратиться чтобы добить этот вопрос, для терминальных юзеров очень бы хотелось иметь просмотр pdf внутри 1с, без запуска внешних приложений…

    Распаковывал всё содержимое папки, и в C:WINDOWSsystem32 клал… при любых вариантах возникает ошибка: RegAsm : error RA0000 : Could not load file or assembly … or one of its dependencies. Operation is not supported.

    На других форумах прочитал, что это может быть связано с контролем имен на .NET3.5 и 4. Пробовал разными способами делать «disable strong name verification». Еще много чего попробывал, но ничего не помогает.

    Вобщем нужна профессиональная помощь…

    Reply ↓
  54. MadDAD

    PDFLibNet.dll для работы требует MSVCR90.dll, MFC90.dll, MSVCM90.dll

    нужно установить — Microsoft Visual C++ 2008 Redistributable Package (x86)

    Reply ↓
  55. MadDAD

    А так же нужно снимать «блокировку файлов скачанных из интернета», это тоже мешает их регистрировать.

    Reply ↓
  56. SLnet

    Запускаю батник, появляется ошибка:

    Installing ActiveX…

    —————————————————

    Microsoft .NET Framework Assembly Registration Utility 4.7.3062.0

    для Microsoft .NET Framework 4.7.3062.0

    © Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

    RegAsm : error RA0000 : Не удалось найти входную сборку «Dushelov.PDFViewer1C.dl

    l» или одну из ее зависимостей.

    Microsoft ® CLR Native Image Generator — Version 4.7.3062.0

    Copyright © Microsoft Corporation. All rights reserved.

    WARNING: This syntax is deprecated or you mis-typed your command. Run «ngen /?»

    to display a list of the currently supported parameters.

    Error: The specified file or directory «Dushelov.PDFViewer1C.dll» is invalid.

    —————————————————

    Done.

    WServer 2012 R2

    Делал:

    Устанавливал Microsoft Visual C++ 2008 Redistributable Package (x86)

    microsoft visual c++ 2015

    .NET3.5

    Файлы все в одной папке на диске C:PDFViewer

    Reply ↓
  57. MadDAD

    (57) Правой кнопкой мыши по файлу -> Свойства -> Внизу нажать «Разблокировать»

    Reply ↓

Leave a Comment

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