Загрузка изображения из буфера обмена или файла для номенклатуры (Управление торговлей 11, УНФ 1.2/1.3/1.4, Розница 2)




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

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

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

<?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='\

69 Comments

  1. salexdv

    Советую посмотреть еще вот в эту сторону — возможностей больше, хоть и требуется установленный Microsoft .NET Framework 2.0

    Reply
  2. Поручик

    Если не поленюсь или будет интерес, добавлю функционала.

    Пока что обработку можно воспринимать ещё и как учебный материал в части использования средств работы с файлами БСП (создание элементов файлов, обновление версий).

    Reply
  3. detec

    Такое есть пожелание. Если используется БСП или требуется какая-то определённая версия типовой конфы, то желательно, чтобы перед вызовом функций/методов общих модулей проверять версию БСП и/или конфы. И ниже определённой версии не запускаться.

    Reply
  4. detec

    Windows 7 x64, клиент-серверный вариант, сервер 1С:Предприятия — x64, на другой машине. В рабочий каталог пользователя не устанавливается. В отладчике выдаёт пустую строку. Каталог я руками менял и перевходил в базу. Можно ли реализовать установку компоненты во временный каталог, на текущий сеанс запуска 1С:Предприятия?

    Версия конфигурации — УНФ, 1.2.3.2.

    Reply
  5. Поручик

    (4)

    Это и так есть и было изначально, ещё с варианта для 10.3.

     СписокДоступныхПутей.Добавить(КаталогВременныхФайлов());
    Reply
  6. Поручик

    Добавил обработку КопированиеИзображенияИзБуфераОбмена82 — УТ1107.epf для Управления Торговлей версий 11.0.6.3 (тестовый релиз) и возможно поздних.

    В УТ 11.0.6.3, вернее в БСП 1.1.1.12, изменились наименования некоторых модулей, механизм присоединённых файлов и многое другое.

    Reply
  7. Поручик

    Ещё один апдейт КопированиеИзображенияИзБуфераОбмена82 — УТ1107.epf, вернее устранение последствий перетасования процедур и модулей в БСП.

    Продолжаем жрать кактус..

    Reply
  8. Поручик

    И ещё много фиксов в КопированиеИзображенияИзБуфераОбмена82 — УТ1107.epf

    И продолжаем жрать кактус….

    Reply
  9. Поручик

    И ещё немного фиксов … Как хорошо было на УТ 11.0.5…

    Reply
  10. Поручик

    На УТ 11.0.6.7 у всех работает без ошибок? Или лень писать?

    Reply
  11. AzzZ

    Я так понимаю нет групповой обработки объектов? В принципе с небольшой доработкой под себя отличная тема. Благодарю.

    Reply
  12. Поручик

    (11) Обработка является развитием этой работы http://infostart.ru/public/19932/ , которая в свою очередь делалась для облегчения процесса научного копи-пастинга изображений или из графического редактора или напрямую с сайтов.

    Какой-либо групповой обработки не предусматривалось.

    Reply
  13. Поручик

    Добавлен вариант обработки для конфигурации Розница 2. Функционал и код практически идентичны, различие только в используемых модулях и вызовах процедур для работы с файлами в этой конфигурации.

    Reply
  14. Поручик

    Как выяснилось, вариант для Розницы 2 работает в Управление небольшой фирмой 1.3

    Reply
  15. laxmaty
    Поручик пишет:

    Как выяснилось, вариант для Розницы 2 работает в Управление небольшой фирмой 1.3

    в Управление небольшой фирмой 1.3 не работает и Розница 2 кстати тоже, при открытии вот чего пишет

    {Форма.Форма.Форма(122,10)}: Переменная не определена (РаботаСФайлами)

    Возврат <<?>>РаботаСФайлами.ПолучитьДанныеФайлаИНавигационнуюСсылкуВерсииВоВременномХран­илище(ФайлКартинки,

    Reply
  16. Поручик

    Не имейте мне мозг, работает. КопированиеИзображенияИзБуфераОбменаУФ_Розница2_82.epf

    Управление небольшой фирмой, редакция 1.3 (1.3.1.4)

    Наверное, не тот файл открыл.

    Разуй глаза и посмотри При скачивании обращайте внимание на варианты файлов

    Reply
  17. laxmaty
    Поручик пишет:

    Не имейте мне мозг, работает. КопированиеИзображенияИзБуфераОбменаУФ_Розница2_82 ­.epf

    Управление небольшой фирмой, редакция 1.3 (1.3.1.4)

    Наверное, не тот файл открыл.

    Разуй глаза и посмотри При скачивании обращайте внимание на варианты файлов

    Ладно не кипишуй, не заметил что файлов там несколько. Спасибо что ткнул носом. Все заработало

    Reply
  18. pantera190

    Спасибо,все работает.Пригодилось.

    Reply
  19. pantera190

    отлично

    Reply
  20. SerejkaSV

    Хорошая обработина. Как раз пригодилась.

    Reply
  21. Поручик

    Добавлен вариант обработки для УТ 11.0.7.8.

    Вариант обработки для Розницы 2.0.2 работает в Рознице 2.0.3

    Reply
  22. panam

    Перестала работать в версии УНФ 1.3.2.5, пишет недостаточно фактических параметров при записи.

    {Форма.Форма.Форма(272)}: Недостаточно фактических параметров

    НСтр(«ru = ‘» + «Не удалось записать основное изображение! %1′»)),
    Reply
  23. Поручик

    (22) Выползи из темы и вкурись, что написано красным жирным шрифтом на основной странице.

    Reply
  24. panam

    Поясняю, в версии УНФ 1.3.1.4 обработка работала за что спасибо, но после обновления версии до 1.3.2.5 перестала работать.

    Скачал заново но оказалось та же самая КопированиеИзображенияИзБуфераОбменаУФ_Розница2_82 1.0.7.

    Reply
  25. Поручик

    (24) Ну не знаю, у меня всё работает в УНФ 1.3.2.5. Сами разбирайтесь, почему у вас косяк.

    Reply
  26. Поручик

    Файл перезалил на всякий случай, но он прежний, от 17 мая 2011 года.

    Reply
  27. netmate

    Может быть глупый вопрос, но:

    1) Добавил обработку в УТ 11.0.7.19 как дополнительные отчёты и обработки

    2) Назначил пользователей для быстрого доступа

    3) Назначил разделы

    При попытке открыть из меню Дополнительные обработки выдается ошибка:

    Установлен безопасный режим. Выполнение операции запрещено

    Что нужно подкрутить?

    Reply
  28. Поручик

    (27) Открой базу под учёткой администратора, потом открой обработку через меню Файл. Компонента зарегистрируется, после чего можно открывать из справочника под обычной учёткой.

    Reply
  29. Поручик

    Под учёткой администратора имеется в виду учётная запись пользователя операционной системы, а не пользователь ИБ с правами администрирования.

    Reply
  30. netmate

    (29) учётка пользователя ОС имеет админские права.

    UPD. сорри, не увидел пред-предыдущее сообщение. Сейчас попробую.

    Reply
  31. Поручик

    В Управлении небольшой фирмой 1.4 тоже работает.

    Reply
  32. Поручик

    Исправлены ошибки в варианте для Управления торговлей линии 11.0.7.8

    Reply
  33. Поручик

    Вариант для УТ 11.0.7.8 работает в УТ 11.0.8

    Reply
  34. Поручик

    Пофиксены некоторые ошибки для варианта УНФ 1.3, Розница 2

    Reply
  35. Поручик

    Пофиксены некоторые ошибки и добавлена улучшенная проверка ссылки на изображение для варианта УНФ 1.3/1.4, Розница 2.0.3, Управление торговлей 11.0.8

    Reply
  36. fixin

    как картинку из буфера таскаешь?

    Reply
  37. Поручик

    Добавлен вариант для конфигураций, основанных на Библиотеке стандартных подсистем 1.2.3.1. В настоящий момент это Розница 2.0.4.5

    Reply
  38. Salavat

    вопрос от дятла:

    не работает обработка в Win 7 Pro 64x.

    пишет clipoard.dll не зарегистрирована.

    указать — не помагает.

    в чём причина?

    Reply
  39. Поручик

    (39) В описании программы и в посте (28) написано. Надо было разуть глаза и прочитать всё, прежде чем в приват переться.

    Reply
  40. Salavat

    (40) знаешь. я захожу только админом и на компе тоже админ. и далее, прежде чем тебя спрашивать — прочитал всё здесь (включая и описание и комменты).

    поэтому и пришлось переться. извини, что обидел. похоже проблема (кроме меня дятла-пердуна) в 64x — как решитьто?

    Reply
  41. Поручик

    (41) Ну не знаю. У меня на Винде 7 корпоративной, 64-х разрядной работает, так что разбирайтесь сами, как хотите.

    Reply
  42. Salavat

    может каких деталей нет в описании?

    делал так:

    скачал, открываю в 1С (пользователи — и ОС и 1С, админы).

    пишет ошибку — «компонента clipboard.dll не найдена…………».

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

    ноль — не работает.

    Reply
  43. Поручик

    (43) Отладчиком пройдитесь.

    Reply
  44. Salavat

    прошёлся:

    в строке 262 формы обработки «КопированиеИзображенияИзБуфераОбмена82 — УТ11078.epf» получается «Ложь».

    файл есть в папке.

    ПолноеИмяClipboardDll = «S:1С 8-28.2.15.301inclipboard.dll».

    ну и сообщение про ошибку, далее.

    тоже самое (таже строка) и при указании другого каталога (через меню).

    Reply
  45. Поручик

    (45) S: это сетевой диск. 1С его, наверное, не видит. Попробуйте указать нормальный, полный путь, вида C:Program Files (x86)1cv828.2.15.319in.

    Действия — Установить ….

    Reply
  46. Salavat

    S — это локальный диск. просто обозвал его админ так. SSD он вообще, поэтому наверное.

    в этот каталог 1С — установлена 1C. bin и др. её каталоги — там например.

    в папке «C:Program Files (x86)…» есть только папка «common». вобще конечно странно, но думаю изза диска это тоже сделали.

    переустановить 1С в «C:Program Files (x86)» ?

    Reply
  47. Salavat

    Действия — Установить ….

    пробовал — разные каталоги — тотже результат. куда нужно?

    Reply
  48. Поручик

    (48) У меня нет Win 7 Pro 64x, и я не знаю тонкостей её поведения. Разбирайтесь сами, как хотите.

    Reply
  49. Salavat

    разобрался наконец — UAC нужно было отключить. теперь всё работает.

    Reply
  50. Поручик

    (50) Ну и хорошо. Внёс в описание программы.

    Reply
  51. arjuna

    на превьюшке видно что обработка на управляемой форме. Для толстого клиента есть варианты?

    Reply
  52. Поручик
  53. Поручик

    Добавлен вариант для конфигураций, основанных на БСП 2.1.2 и позднее (Розница 2.0.8 , УНФ 1.4.6, возможно УТ 11.1)

    Reply
  54. Поручик

    Вариант проверен также в Рознице 2.0.6.4 и УТ 11.1.2.8

    Reply
  55. Yashazz

    Руки у меня кривые, видать. Не хочет компоненту подключать, ПодключитьВнешнююКомпоненту возвращает ложь, я уж её и в макет конфы сунул, и как библиотеку зарегил. Дело было на клиенте, Win2003, 1С 8.2.17.169

    что не так, помимо головного мозга?

    Reply
  56. Поручик

    (56) Попробуй UAC отключить, запустить обработку, потом включить назад.

    Reply
  57. Yashazz

    (57) И так уж всё на небезопасном минимуме стоит, всё дозволено, и сам — админ. Нейдёт, однако.

    Reply
  58. Поручик

    (58) Тогда ничем не помогу. Вопрос к операционной системе или к библиотеке clipboard.

    Reply
  59. Поручик

    Вариант для конфигураций, основанных на БСП 2.1.2, работает также на УТ 11.1.6.

    Хорошо хоть 1С больше не колбасит подсистему прикрепляемых файлов.

    Reply
  60. AKV77

    Спасибо большое. Очень пригодилась

    Для себя в базе УТ 11.1 доработал возможность хранения картинок также и для характеристик номенклатуры и адаптировал для этих целей данную обработку. еще раз огромное спасибо !

    Reply
  61. Modern

    Добрый вечер ! Обработка шикарная, уже два года пользуюсь. Один вопрос возник, не получается у меня её запустить в веб-клиенте. Очень нужно удаленному сотруднику доступ предоставить именно через веб клиент. Firefox ругается что clipboard.dll не установлен. IE что расширение для работы с файлами не подключено.

    Reply
  62. Поручик

    (62) В веб-клиенте с ней не работал. Если так надо, за тысячу рублей возьмусь.

    Reply
  63. Modern

    Е(63)

    Устраивает. Куда платить? Может почту оставите я конфигурацию скину.

    Reply
  64. Поручик

    (64) Не надо пока конфигураций. Лучше здесь напишите, какая именно и какой вариант обработки. Чую, что в веб-клиенте компонента может вообще не работать по причине com-овской природы, но обосновать не могу.

    Reply
  65. Modern

    КопированиеИзображенияИзБуфераОбмена82 — УТ11078.epf версия 1.0.7

    Управление торговлей для Казахстана — 3.0.2.19

    Reply
  66. Modern

    Обработка сообщает ошибку, потом запускается и сразу отваливается. Момент работы даже поймал.

    Reply
  67. Поручик

    Интересно, в УТ 11.2 кто-нибудь пользуется?

    Reply
  68. wing

    В тонком клиенте длл совсем не работает?

    ПодключитьВнешнююКомпоненту возвращает Ложь

    В справке пишут:

    Для режимов запуска «Тонкий клиент» и «Веб-клиент», компонент должен быть предварительно установлен методом УстановитьВнешнююКомпоненту.

    А в описании этого метода примечание:

    Метод работает только с компонентами, хранящимися в архиве.
    Reply
  69. SkyLink2012

    Надо в 1с вставить картинку из буфера обмена ? Работать с изображением из буфера обмена в 1с версий 8.1 , 8.2 , 8.3 из Windows XP- windows10?

    Пока возможно скачать разработку 2010 года https://infostart.ru/public/19932/ без списания стартмони в 2018, 2019, 2012 году бесплатно. В макете обработки есть dll-ка clipboard.dll 511кб ( 523264б ), версия 1.0.0.5

    Возникает ошибка 80004005 при регистрации ( c:Program Files1cv82>regsvr32 clipboard.dll ) в командной строке?

    Попросту, надо запустить cmd «Командная строка (Администратор)» и зарегистрировать библиотеку

    regsvr32 «c:Program Files1cv82clipboard.dll»

    Очень простой код

    ЗагрузитьВнешнююКомпоненту(«clipboard.dll»); //и не надо вам никаких V8ADD.dll, если только фотки грузить, путем подгрузки через Base64
    Попытка
    КомпонентБО = Новый(«AddIn.clipboard»);
    Исключение
    Сообщить(«Не удалось создать объект компоненты clipboard»);
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
    

    Показать

    Тип не определен (Addin.Clipboard) ? Понадобиться запустить cmd «Командная строка (Администратор)» и зарегистрировать библиотеку

    regsvr32 «c:Program Files1cv82clipboard.dll»

    В итоге, в рунете появятся бОльше качественных и полезных фото))

    В целом, для тех кто не в пожизненной теме — C# . Кто с уважением посматривает на кнопку «Заказать установку этой обработки». На дворе 2018год. Уже Python as an Excel scripting language Для 1с+Python from PIL import Image и subprocess.Popen в помощь! 🙂

    Reply

Leave a Comment

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