Шильдик. Изменение заголовка конфигуратора 1С и выделение цветом конфигураторов разных баз




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

32 Comments

  1. AlexInqMetal

    на 8.2 win7 x64 работает

    Reply
  2. kraynev-navi

    (1) Спасибо

    Reply
  3. jaroslav.h

    А как пользоваться, скажите?:) Главное цвет окна изменить хочу

    Reply
  4. kraynev-navi

    (3)

    Когда активен конфигуратор, жмем кнопку настроек. Единственная кнопка «ключ-отвертка». Далее появляются остальные кнопки.

    3-я кнопка в верхнем ряду.

    http://infostart.ru/upload/iblock/94f/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0­%B9%D0%BA%D0%B8.png

    Выбираем нужный цвет. Далее жмем «Да». Теперь для данного конфигуратора этот цвет будет всегда.

    Reply
  5. SoulCast

    Скажите, только Конфигуратор дифференцируется? Режим «Предприятие» не поддерживается?

    Reply
  6. kraynev-navi

    (5) Да, только конфигуратор.

    А есть ли смысл делать тоже самое для режима «Предприятие»? В типовых конфигурациях есть общая настройка «Заголовок программы» — вроде хватало…

    Reply
  7. seregasame

    спасибо! полезная штука

    Reply
  8. jaroslav.h

    (4) разобрался, спасибо, винд. сер 2012 р2

    Reply
  9. SoulCast

    Не знаю… с одной стороны может и хватало, с другой встречались ситуации когда хочется дополнительно выделить, особенно когда часто переключаешься и глаз замыливается. В любом случае пусть это будет комментарий по улучшению).

    Reply
  10. kraynev-navi

    (9) ок, пусть будет )

    Reply
  11. kraynev-navi

    Уважаемые, скачавшие! Поделитесь впечатлениями о программке. Используете? Помогает?

    p.s. Пока создавал и тестировал, настолько привык к удобству, что уже как-то раздражало, если шильдик был не запущен и приходилось делать лишние клики в «Показать информацию о программе», дабы узнать где находишься.

    Reply
  12. TVA_11

    Я что-то непонял, для чего это надо?

    И зачем работать из чужого конфигуратора?

    Reply
  13. Lancelot-2M

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

    Reply
  14. kraynev-navi

    (12) лучше один раз увидеть все-таки. Видео сделал, залью в паблик. Тогда, думаю, будет понятно.

    (13) Спасибо за отзыв.

    Как опцию внедрю отключение «шапки»

    Reply
  15. kraynev-navi

    (12) Видео добавил в публикацию:

    https://vimeo.com/158964793

    Таскаем Шильдик по экрану, переключаемся по Alt+Tab между конфигураторами, смотрим как это выглядит в панеле задач. А если включено Windows Aero — все еще веселее.

    Reply
  16. Lancelot-2M

    (15) и…. сразу не написал — вот лишние «=» в заголовках окон. Совсем лишние. Место на панели задач занимают, а суть не отражают.

    Прям сейчас куча окон открыта — от заголовка окна остается первые 6 символов (а можно и меньше) — из них первый «=» — как результат у двух конфигураторов одинаковые заголовки на панели задач.

    Reply
  17. Olenevod

    Супер штука! Огромное спасибо)

    Reply
  18. Патриот

    Исходники не выложите? тогда с меня плюс и скачивание =)

    Reply
  19. kraynev-navi

    (18) не вижу смысла

    Reply
  20. Патриот

    (19)

    • убедиться, что код не приведёт к побочным действиям (намеренным вряд ли — на ИС культурные люди, но бывают и не намеренные косяки)
    • иметь возможность доработать под себя, также оперативно доработать, если алгоритм поломается
    • на основе этого кода разобраться с языком (есть опыт работы с ahk, но как там реализовать ваш продукт, я не придумал с ходу)
    Reply
  21. Vladimir Litvinenko

    Спасибо! Поможет в работе.

    Reply
  22. Vladimir Litvinenko

    (11) На Windows Server 2012 не работает. Подозреваю, что на Windows 10 тоже. Нет ли планов доработать? Хотелось бы продолжить использование программы.

    Reply
  23. kraynev-navi

    В (8) вроде как раз работал. Сообщите другие параметры. Разрядность, версия 1С и т.д.

    Проблема существует. Надо разбираться. Как будет новая версия, отпишусь.

    Reply
  24. kraynev-navi

    Поправил, работает, выложил. Правда, на x86 не тестировал — нет по рукой.

    Reply
  25. Vladimir Litvinenko

    (24) Скачал версию 1.1.0. Подтверждаю, работает на Windows Server 2012 и Windows 10. Есть только небольшое замечание, при использовании англоязычного интерфейса конфигуратора изменение заголовка не поддерживается. Подпишусь на тему на случай появления фикса ))

    Reply
  26. babys

    Штука возможно очень полезная, но я ОЧЕНЬ не внимательный 🙁

    Но есть замечание, и оно срочное, не работает на некоторых базах 🙁

    Reply
  27. Vladimir Litvinenko

    (26)

    На «некоторых» базах может не работать в том случае, если их запуск происходит не через стартер 1сv8s.exe или 1cestart.exe, а непосредственно через файл 1сv8.exe из директории bin. В этом случае в командной строке запуска отсутствует имя базы, что вероятно является причиной того, что заголовок окна не меняется. Отсутствие имени базы в строке запуска можно наблюдать в этом случае в диспетчере задач.

    Попробуйте запускать эти базы через стартер 1С.

    Reply
  28. olegmedvedev

    На Microsoft Windows 7 Профессиональная 6.1.7601 Service Pack 1 Сборка 7601 32 bit — не работает!

    в остальном — это замечательная программа, которую бы сильно хотелось попробовать, но не получилось, что очень жаль(

    Reply
  29. bogdan_sukonnov

    Спасибо большое! Как же давно хотел такое решение. И как же давно оно существует, а я о нем не знал.

    Reply
  30. v.l.

    Требуются ли права локального администартора?

    Reply
  31. Olenevod

    Добрый человек, если ты меня слышишь, сделай, пожалуйста, чтоб эта великолепнейшая вещь заработала на платформе 8.3.15

    Там она не работает.. (((

    Reply
  32. Olenevod

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

    Скачал новую версию, все заработало.

    Спасибо большое за такую прекрасную вещь! 🙂

    Reply

Leave a Comment

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