Архиваторный плагин Total Commander для работы с файлами cf, epf, erf, cfu, cfe, hbk как с архивами.




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

42 Comments

  1. lefthander

    Ну что работает… это радует…. будем посмотреть.

    Reply
  2. jem

    При открытии cf (26мб) файла пишет «Выполняется открытие файла» и все, не открывает 🙁

    Reply
  3. tojocky

    как насчет исходников? может будет новые предложении?

    Reply
  4. awa

    (2) У меня есть подозрение, что ты перепутал с вот этим плагином http://infostart.ru/projects/1485/, так как такая надпись есть именно там.

    (3) Как мне кажется, исходники рано выкладывать, они сыроваты еще. К тому же, ничего принципиально нового, по сравнению с v8Unpack (http://infostart.ru/projects/1843/), мною не сделано, кроме двух моментов: разобрался до конца со временем создания и модификации файлов внутри контейнера, и понял, как удалять файлы из контейнера cf/epf, не переписывая целиком контейнер.

    Reply
  5. coder1cv8

    Интересно… А можно как-нить сделать, что бы cf/epf файлы не отображались со значком архива, а то путаешься с непривычки… )

    Reply
  6. awa

    (5) В текущей версии нет, в следующей планирую сделать это настраиваемым. Есть два варианта, предоставляемые Total Commander’ом для архиваторных плагинов: 1. Отображение файлов значком архива, вход в архив по Enter и по Ctrl-PgDn; 2. Отображение файлов стандартным значком по-умолчанию и вход в архив только по Ctrl-PgDn.

    Reply
  7. tojocky

    Спасибо за быстрый ответ! Но все же вместе более быстро сможем устранить ошибки, как говориться «одна голова хорошо а двое лучше!»! Я еще заинтересован как найти статические коды? может проще будет разобрать файлы из папки bin. Видел что есть спец. база где это делает… но боюсь что там не все можно узнать!

    Reply
  8. awa

    (7) Что такое статические коды? О чем идет речь?

    Reply
  9. tojocky

    на пример:

    7e7123e0-29e2-11d6-a3c7-0050bae0a776 Аттрибуты очета

    5c83cba4-7a20-4102-a5be-add0ee74f6a1 форма

    ded41cfe-0184-4364-9486-46fe93469d47 DefaultConstantForm

    и по GUI:

    09ccdc77-ea1a-4a6d-ab1c-3435eada2433 Панель

    6ff79819-710e-4145-97cd-1618da79e3e2 Кнопка

    Reply
  10. awa

    (9) Так ты хочешь сделать разбор метаданных? Это отдельная большая работа. Лучше всех в этом преуспели MMF и German, имхо. Тут я выложил известные мне GUID 1C http://ifolder.ru/7160530

    Reply
  11. tojocky

    Да.. не маловато! к стати можешь добавить найдены мною значения!

    7e7123e0-29e2-11d6-a3c7-0050bae0a776 Атрибуты отчета

    ded41cfe-0184-4364-9486-46fe93469d47 DefaultConstantForm

    Может вместе соберемся и доводим до ума разбор метаданных… иначе по одиночеству до результата не дойдем!

    Reply
  12. Sol

    Продолжения не будет?

    Reply
  13. awa

    (12) Лето же на дворе! Время отпусков, дач и прочих развлечений! Вот как начнутся тоскливые осенние вечера, которыми делать больше нечего, кроме как писать очередную нетленку… ))

    Reply
  14. autocats

    Распаковать смог, а как теперь отрыть скрытые модули? У кого-то есть опыт?

    Reply
  15. coder1cv8

    (14) исчо один хакер? ) Всё ужо открыто до вас…

    Reply
  16. gortol

    кто этот плагин тестил?

    у меня он не ставится, говоритв окне файловых ассоциаций:

    «Этот файл не является корректным плагином»

    это только у меня так?

    (или что то с вирусом связано?!)

    Trend micro нашёл в нём вирус, drweb — нет

    Reply
  17. awa

    (3) Выложил исходники.

    Reply
  18. genrih

    Огромное спасибо за Ваши разработки «Архиваторный плагин Total Commander для работы с файлами cf, epf и erf как архивами (контейнерами)» и «Tool_1CD. Программа просмотра файлов баз *.1CD (1Сv8.x)»

    Очень выручили. Во время работы упала 1с и больше не открылась. Выдавала «Ошибка формата потока», оказались сломанными и рабочая конфигурация и базы данных, но с помощью Вашего Tool_1CD удалось сохранить в файл битую конфигурацию, которую 1с тоже не смогло открыть, но с помощью плагина скопировал в небитую конфигурацию (последнего бекапа) последние изменения из битой и получил не битую конфигурацию с последними изменениями.

    Reply
  19. OksanaSub

    Очень помог несколько раз)))

    Reply
  20. kredko

    Попробовал. Работает только с версией 8.1 (cf/epf), а с версией 8.2 только epf, cf не открывает.

    Reply
  21. nooks

    Возникла проблема, файл побился во время отключения света, epf обработка побилась и ничем не открывалась, данный сабж не помог, если у кого-то возникла подобная проблема — помогает софтина Ontrack_EasyRecovery_Professional

    Reply
  22. KAPACEB.AA

    Удобная вещь. Помог, когда надо было быстро найти определенную строку в тексте нескольких десятков внешних обработок. Спасибо.

    p.s. кст, на TC 8.0 (64 bit, win7) не устанавливается — пишет «This is not valid plugin!».

    Reply
  23. vprus

    Спасибо, очень удобная вещь. Так будет ли работать с версией 1С 8.2, о чем писал kredko?

    Reply
  24. MarSeN

    (0)

    а есть то-же самое только в виде dll чтоб использовать в 1С?

    Reply
  25. Evil Beaver

    (4)

    разобрался до конца со временем создания и модификации файлов внутри контейнера, и понял, как удалять файлы из контейнера cf/epf, не переписывая целиком контейнер

    Поделитесь информацией?

    Reply
  26. awa

    (25) Исходники приложены же. Будут вопросы — пишите в личку.

    Reply
  27. ilov_boris

    awa, большое спасибо. За годы работы так привык к этому плагину, что уже не представляю себе TC без него 🙂

    У меня есть маленькая просьба… Соберите, плиз, x64 версию. Ну или хоть makefile для VS2012, чтобы самостоятельно можно было собрать.

    Reply
  28. awa

    (27) Собрал. Правда, размеры файла получаются чудовищные, так я и не поборол это. Embarcadero пихает в файл до фига лишнего.

    Reply
  29. ilov_boris

    (28) на сколько чудовищные?

    Reply
  30. awa

    (29) win64 dll получилась 10 мегабайт.

    Reply
  31. ilov_boris

    (30) 10 мег. не шибко страшно. Главное чтобы размер на скорость работы не влиял.

    Reply
  32. Dansur

    Класс!

    Reply
  33. the1

    TC 7.50 работает, 8.01 нет. Так, для справки

    Reply
  34. Захаров_Николай

    В UnrealCommander v2 подключил, но хоткей не открывает.

    Reply
  35. tazmag

    вот тепперь без тотала никуда))

    Reply
  36. kalashae

    При использовании плагина обнаружил такой глюк. Захожу в файл .cfu, ничего не меняя, размер возрастает с 250 кБ до 1.2 МБ. Сам файл после этого становится нерабочим, 1С выдаёт ошибку при обновлении.

    Файл прикрепил во вложении, если кому-то будет интересно…

    Reply
  37. awa

    (36) Спасибо за сообщение об ошибке. Выложил новую версию с исправлением.

    Reply
  38. mikele_bes

    приветствую

    при открытии конфы упп вылетает ошибка

    Reply
  39. Antony_79

    Плагин установился успешно в тотале, но комбинация клавиш Ctrl-PgDn по файле *.cfu (УТП) ничего не происходит. В чем может быть проблема?

    Reply
  40. awa

    (40) Возможные причины: при установке плагина, когда Total выдавал окошки по привязке к расширениям была нажата не клавиша ОК, а Отмена или Escape. Попробуйте переустановить плагин и нажмите ОК во всех окошках запроса по каждому расширению.

    Также попробуйте входить в архив не по Ctrl-PgDn, а по Enter. Если не получится, выложите Ваш cfu-файл для проверки.

    Reply
  41. Antony_79

    (41) спасибо, уже работает

    Reply
  42. SerVer1C

    Кто-нибудь имел успешный опыт использования данного плагина в Double Commander ? Вроде бы совместимость плагинов между TC и DC есть.

    Reply

Leave a Comment

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