StartPlus – стартер 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='\

37 Comments

  1. rsu555

    удобно

    Reply
  2. vitonya

    Спасибо, старался.

    Reply
  3. log22

    Премного благодарен. Очень полезная вещь

    Reply
  4. DDD2005

    Программа хорошая но много еще делать до совершенства

    пока выбрал эту http://apxi.pioner-plus.ru/delphi/for1c/run1c/index.php

    Reply
  5. vitonya

    DDD2005, Их нельзя сравнивать. В той только базы 7.7.

    А в StartPlus можно указать любую командную строку.

    StartPlus первоначально задумывался не для 1С. А был потом адаптирован под 7.7

    Reply
  6. Rustig

    поставлю плюс, чтобы в «избранных» был, хоть и проверить бы надо…

    кто-нибудь проверял работоспособность?

    автору авансом спасибо! 🙂

    всем успехов!

    Reply
  7. Alraune

    (6) Я проверяла. Работает.

    Только плюс поставить забыла. Исправляюсь.

    Reply
  8. IamAlexy

    (5) та программа может просканировать каталог с базами 1с и сама создать ссылки на все найденные базы.

    это очень и очень большой плюс..

    то что там нет возможности запуска 8.2 — соответственно тотальный минус 🙂

    Reply
  9. vitonya
    IamAlexy пишет:

    (5) та программа может просканировать каталог с базами 1с и сама создать ссылки на все найденные базы.

    это очень и очень большой плюс..

    то что там нет возможности запуска 8.2 — соответственно тотальный минус

    Я админ, и мои пользователи, (которых около сотни) не должны сами ничего сканировать и добавлять.

    Мои базы все в сети. Я сам должен управлять списком баз и программ, которые им нужны.

    А на своем компе я пользуюсь стандартными лаунчерами 1С.

    Reply
  10. begemot

    Стояла задача, чтобы пользователь одним стартером мог запустить любую базу 1С: 7.7, 8.1, 8.2. Этот стартер оказался то что нужно…

    В эксплуатации уже примерно год…

    Reply
  11. begemot

    (8) то что нет интерактивной возможности лазить шаловливыми ручками по настройкам — это очень большой плюс! 🙂

    Reply
  12. Damian

    (11) Не согласен.

    У меня, конечно, шаловливые ручки, но еще кроме этого около 40 семерочных баз клиентов на жестком диске. Согласитесь, не совсем удобно при добавлении новой базы лезть в файл и прописывать путь.

    А так как часто бывает, что я обновляю базы, и храню оригинал и копию, которую обновляю — опять таки чертовски неудобно будет все это дело заносить в файл *.lst вручную.

    Автор, может можно уже добавить кнопку добавления баз/объектов уже. (с) Маша и Медведь

    Reply
  13. vitonya
    Damian пишет:

    Не согласен.

    У меня, конечно, шаловливые ручки, но еще кроме этого около 40 семерочных баз клиентов на жестком диске. Согласитесь, не совсем удобно при добавлении новой базы лезть в файл и прописывать путь.

    А так как часто бывает, что я обновляю базы, и храню оригинал и копию, которую обновляю — опять таки чертовски неудобно будет все это дело заносить в файл *.lst вручную.

    Автор, может можно уже добавить кнопку добавления баз/объектов уже. (с) Маша и Медведь

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

    Вам, скорее всего, подойдет эта http://apxi.pioner-plus.ru/delphi/for…/index.php

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

    Reply
  14. begemot
    vitonya пишет:

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

    Замечательно… весьма нужная вещь…

    У меня сейчас организовано так. При подключении клиента через терминал, запускается пакетный файл, в котором производится запуск стартера. Следующей командой идет logoff. Т.е. как только пользователь закрывает стартер, происходит завершение сессии. Без этого терм. сессии периодически подвисали.

    Reply
  15. salexdv

    Такой велосипед уже давно изобретен 🙂

    Reply
  16. vitonya
    Alxd пишет:

    Такой велосипед уже давно изобретен 🙂

    Такого велосипеда нет!!!

    Еще раз объясню свою позицию:

    -моя программа запускает не только 1С. (любой батник, или даже документ word)

    -кнопок редактирования списка программ для пользователя не должно быть!

    Reply
  17. salexdv

    (16) Hot tray тоже умеет запускать любые программы

    А вот отсутствие кнопок редактирования никак не вписывается в его философию 😀

    Reply
  18. AERoport

    Попробовали данную программу. Из-за нехватки некоторого функционала написали собственную. Описание здесь http://infostart.ru/public/91323/

    Reply
  19. still_

    очень хорошая вещь, может я конечно ничего слаще редьки не ела, но мне нравить. Я вообще люблю чтобы всяких значков на рабочем столе и на панели задач было по минимуму. Удобная вещь — рекомендую.

    Reply
  20. nickkey

    Спасибо автору отличная программа удобно и практично ждем новых версий можно было бы добавить нечто вроде проверки подключения торгового оборудования, компонент и так далее вообще админский инструмент получится неплохой ну голь на выдумку хитра желаю творческих успехов 🙂

    Reply
  21. MegaPoster

    Отличное и простое решение.

    Есть пожелание добавить возможность отключения строки состояния.

    А еще не плохо было бы сделать режим работы «вместо оболочки», чтоб прога запускалась в виде панели задач (компактно и поверх всех окон).

    Reply
  22. AERoport

    MegaPoster Вместо оболочки — наверное лучше прописать в политиках (GPO)?

    Reply
  23. MegaPoster
    наверное лучше прописать в политиках (GPO)?

    кому как удобно, но это не изменит свойств окна программы

    Reply
  24. zfilin

    Неплохая вещь, но зачем она делает в командной строке upcase перед тем как отправить на выполнение? Невозможно передавать регистрочувствительные пароли.

    Reply
  25. vitonya
    zfilin пишет:

    Неплохая вещь, но зачем она делает в командной строке upcase перед тем как отправить на выполнение? Невозможно передавать регистрочувствительные пароли.

    Исправлю в следующей версии.

    Reply
  26. commo

    Отлично. Спс

    Reply
  27. MegaPoster

    При запуске из командной строки как задать чтоб не разворачивалась на весь экран?

    Reply
  28. ufo58

    напрасно ребята «хаяли» эту вещицу

    замечательная штука

    тем более сейчас, когда у 8.2 нет административной установки

    из этой программки можно выжать удивительные вещи

    Reply
  29. ufo58

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

    1. пора подумать над солидной иконкой. ставить существующую пользователям не совсем … приходится менять. а жаль. авторство — есть авторство. тем более что работа сделана красиво.

    2. запуск программы с параметрами — замечательно. у каждого пользователя может быть свой набор меню. но …. если с одного компа с этой программой работают несколько пользователей (скажем текущий — постоянно а админ — по мере необходимости) — получить личные списки меню не так просто. не плохо было бы добавить выбор пользователя и пароля. причем в «Global.ini» включить функцию скажем «Предлагать смену пользователя» и «Пользователь по умолчанию».

    3. если честно, мне как то «до лампочки» какие папки будут у пользователя. руководить этим тоже … «в лом». мне (как админу) главное ЧТО будет запускаться и КАК, а «интерфейс» пусть рисуют себе сами. хорошо бы добавить (скажем так) кнопок «Добавить папку», «Изменить имя папки», «Удалить папку (без удаления элементов)»,»Перенести в папку», «Переместить вверх (и вниз)». т.е. добавить чуть-чуть сервиса.

    4. но не менять сути. достоинства этой вещицы как раз в том, что она позволяет запускать все что пожелаешь (а не только 1С) и не дает пользователям лазить куда не следует. а «наполнением содержания» могут занимаются те, кто и должен заниматься (ручками или другими инструментами — кому как будет удобно)

    5. и последнее — простота залог надежности, стабильной работы и красоты в конце концов. такого качества этой программулины менять не нужно

    Reply
  30. vitonya

    Спасибо. Ее дальнейшем развитием занимается другой человек. Ему и передам Ваши пожелания.

    Reply
  31. lehis_S

    Спасибо автору, хорошая вещь.

    Reply
  32. MegaPoster

    Когда жать новых версий?

    Reply
  33. AERoport

    (32) MegaPoster, альтернативный Проект http://infostart.ru/public/91323/ развивается.

    Какие есть пожелания ??

    Reply
  34. MegaPoster
    альтернативный Проект http://infostart.ru/public/91323/ развивается.

    Какие есть пожелания ??

    Как-то пропустил ее… Скачаю, посмотрю.

    Reply
  35. ADirks

    Автор, не ведись на предложения добавить то, и добавить сё. Эта программа хороша именно в том виде, в каком есть.

    Но тем не менее, пожелания 🙂 1) сворачиваться в трей; 2) иконку на кнопку «выход» прилепить другую (с этой есть стойкая ассоциация «выключить компьютер»).

    Reply
  36. dumal

    Спасибо. Реально удобно, когда пользователь работает через удаленный рабочий стол. Обычно сисадмин старается ограничить его во всем, настраивая запуск одной программы при входе на сервер. В том случае, если пользователь работает и с 7.7 и с 8, это не прокатит. Ваш вариант мегаудобен

    Reply
  37. Lik2707

    Судя по объявленному функционалу — довльно полезная вещь. Особенно лично мне нравится то, что пользователь но может сам редактировать списки баз (зачем это ему, если есть админ и прог…)

    Reply

Leave a Comment

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