Вертикальное меню




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

28 Comments

  1. support

    Красиво!

    Reply
  2. Yasen

    Да, дизайнер хороший у вас)

    Reply
  3. barsuk

    Че-то подглючивает меню при отображении:(

    Reply
  4. 33lab

    (1) Спасибо.

    (2) Это не дизайн это стиль 😉 а вот дизайнера к сожалению нету 🙁

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

    Reply
  5. barsuk

    (4) а где можно взять вашу аську?)

    Reply
  6. 33lab

    (5) в профайле все есть (1.6.5.7.6.8.9.3.8)

    Reply
  7. Ish_2

    Для 8.2 , я так понимаю, предложенная обработка не нужна ?

    Reply
  8. Красавчики! Сбылась мечта идиота! )))

    Reply
  9. warrior1985

    Прикольно. +

    Reply
  10. 33lab

    (7) Если 8.2 используется исключительно как «толстый клиент» то думаю обработка не помешает.

    (8) 😉

    (9) Получил первое сообщение (на почту), хоть сам и не люблю рекламу, но без нее никуда да и закоментарить ее всегда можно.

    Reply
  11. luns

    альтернативная разработка: http://infostart.ru/public/21387/

    Reply
  12. BRT

    Пожелание.

    При выборе объекта (Справочник, документ) можно автоматически заполнять «представление» автоматически из Синонима объекта.

    Думаю если эт оОбработка или отчет то тоже возможно

    Reply
  13. 33lab

    (12) Доработал автоматическое заполнение представления по метаданным.

    Обновил разработку.

    Reply
  14. А вот еще пожелания:

    1. в дополнение к (12), что если и в иконку будет добавляться типовая картинка документа, отчета или обработки в соответствии с метаданными.

    2. но гораздо важнее подцепить сюда еще и возможность подключения внешних отчетов и обработок. вот это было бы просто экстаз! ))

    Reply
  15. 33lab

    (14) Реализовал пожелания. Обновил разработку.

    P.S. Скриншоты поменяю позднее (в «Общей настройке» добавился каталог файлов, по аналогии с каталогом картинок)

    Reply
  16. Batchir

    Ещё пожелания:

    Реализовать возможность пользователю самому настраивать меню.

    Список доступных метаданных в этом случае фильтаровать по праву доступности

    Reply
  17. rasswet

    картинки не видны:(

    Reply
  18. 33lab

    (17) Проблема была в нашем местном провайдере, который предоставляет услуги хостинга (картинки грузятся по ссылке с нашего сайта)

    Reply
  19. 33lab

    (16) Добавил функцию «ЕстьПравоДоступа», можете корректировать ее по своему усмотрению (по умолчанию проверяется право доступа на просмотр). Обновил разработку.

    Reply
  20. bearcat

    да, это не для пользователей

    скачала, вертикальное меню не получилось, зато теперь радостно появилась вертикальная реклама 33lab.ru, которую убрать не удается

    Reply
  21. 33lab

    (20) Это рекламный вирус 🙂

    Ну а если серьезно, закрыть рекламу можно просто нажав на крестик (в правом вернем углу формы). Для настройки меню необходимо нажать на форме правой кнопкой мышки, появится меню выбора из 2 пунктов (настройка и закрыть), нажимаем «настройка» и далее по интуиции.

    Reply
  22. bearcat

    (21) закрыла программу, снова открыла уже не было боковой панельки 😀

    ВОПРОС

    1. выбранные в избранное строки аатоматически выстраиываются по алфавиту (кроме документов) и их нельзя менять местами?

    например , я перенесла в извбранное и строки выстроились так:

    Авансовые отчты

    акт сверки

    возврат товаров от покупателя

    корректировка долга

    поступление товаров и услуг

    внешние обработки

    вычеты по НДФЛ

    доходы буд периодов

    но!!!

    я на лист бумаги специально выписала, что я еще переносила только что в избранное:

    расчеты по страховым взносам

    кассовые документы

    складские документы

    документы учета кадров

    они были в «избранном» считанные минуты и исчезли

    как нужно закреплять в «избранном» выбранные строки?

    и как удалить из избранного , что решила удалить?

    и как поменять их местами?

    пока что не нашла ответов на вопросы, экспериментирую

    2. можно сделать две, три, четыре папки ИЗБРАННОЕ?

    3. стала «набирать» в папку «избранное» и увидела, что строки , которые я переношу в папку избранное странным образом исчезают.

    Reply
  23. bearcat

    я смотрю, что ваши скриншоты совсем не такие, как тот вид , что у меня в 1С

    у меня итнтерфейсная панель,

    это, видать, не ваша обработка, сорри

    Reply
  24. 33lab

    (22) Подобные вопросы лучше писать в аську иначе комментарий получается уж слишком большой.

    Ответы:

    1.Менять местами можно все что угодно, смотрим на рисунок «Настройка», удаление,добавление,редактирование — смотрим все тот же рисунок .

    2.Можно

    3.Само собой ничего исчезнуть не может

    P.S. Обработка достаточно подробна описана, как можно в ней не разобраться даже не представляю.

    Reply
  25. psamt1k

    Адназначна +!

    Реализовал то, о чем я мечтал и помаленьку воплощал в действительность. Но по сравнению с этой обработкой — я просто неуч =)

    Reply
  26. AlexeyMAGician

    Косяк: при редактировании пункта мею, в представлении всегда выставляется первое из метаданных.

    Процедура АтрибутФормы_ПриИзменении(Элемент)
    //… мыши погрызли…
    Если ПустаяСтрока(Вид) Тогда //*** Добавить
    Вид=?(Метаданные[Тип].Количество()=0, «», Метаданные[Тип][0].Имя);
    АтрибутФормы_ПриИзменении(«Вид»);
    КонецЕсли; //*** Добавить
    //… мыши погрызли…
    
    

    Показать

    Reply
  27. 33lab

    (26) Спасибо за выявленную ошибку. Лучше исправить ее следующим кодом:

    Если ПустаяСтрока(Вид) Или НЕ ТипЗнч(Элемент)=Тип(«Строка») Тогда //Вызов в «ПриОткрытии»
    Вид=?(Метаданные[Тип].Количество()=0, «», Метаданные[Тип][0].Имя);
    АтрибутФормы_ПриИзменении(«Вид»);
    КонецЕсли;
    
    

    В вашем примере при смене «ТипаОбъекта» — «ВидОбъекта» меняться не будет (если представление было заполнено).

    Обработку обновил.

    Reply
  28. GERDUSKA

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

    Reply

Leave a Comment

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