Запускалка баз 1с 7.7




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

57 Comments

  1. Дуб

    (0) скриншоты где?

    Reply
  2. Дуб

    +(1) фиг с ними, со скриншотами, и так ясно.. А почему из реестра не цепляет? Нафига файлы плодить?

    Reply
  3. Дуб

    Понял. Мне не нужно, но прикольно. Плюсую.

    Reply
  4. vde69

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

    «Запускалка баз 1с 7.7» позволяет держать все настройки на сервере и не париться, что у кого-то база не прописана,

    кроме того они не забудут пароль, и не передадут его (пароль на вин редко передают, ведь в личном профиле личные данные, напр аська и по этому звери виндовый пароль не передают)

    причем если например у пользователя «отвалился» сетевой диск, то все базы с этого диска у него пропадут из списка выбора 10

    Есть еще всякие вкусные мелочи которые поймешь когда начнешь работать 🙂 все расписывать — долго, вещь простая и понятная

    последнее:

    есть различия между двумя списками, для «дополнительных» баз можно подключаться если списка пользователей нету вообще, это удобно например для копий (поднял, и снес файлик), такая база появиться у всех кто имеет файловый доступ

    Reply
  5. minele

    А надо ли это? пароль и создан для того чтобы все было зашито (см приказ Пу от 2007 г). А так удали папку с пользователями и заходи как хочешь. Сейчас проблема как блокировать удаление этой папки, без вреда для работы с ней.

    Reply
  6. vde69

    ты просто не прочитал, там все написано.

    Для «Основного» списка баз 1с не будет запускаться если вин логина нету списка пользоватей

    Для «Дополнительного» списка — это нормально (список для всяких копий, тестов и т.д.)

    каталог usrdef, так-же как *.md для всех пользователей кроме админа базы необходимо сделать «только для чтения», по моему это делать обязательно ВСЕГДА и для ВСЕХ баз

    Reply
  7. k0ketbi4

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

    Reply
  8. vde69

    to (7)

    1. если не использовать доп контроль по различным доменам/рабГрупам, то этот параметр не нужен

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

    3. например в винде у меня логин «DV» тогда достаточно создать пользователя в конфигураторе с логином «DV» и дать ему права на папку

    Reply
  9. vde69

    Кстати кто кинет пример получения по логину наличия прав на открытие конфигуратор (но только именно парсинг файла, без всяких внешних DLL),

    прикручу авто доступность конфигуратора и монитора и сделаю отчет по всем базам на предмет безопасности.

    просто я себе компоненту в дельфи тогда сделаю, пока у меня собрано там: список пользователей, SQL параметры, права на доступ к файлам, работа с AD, Реестр стартапа 1с. (не хватает списков ролей и прав)

    Reply
  10. vde69

    (1) добавил скрин.

    Reply
  11. pavlo

    я так понимаю, работает только если отдельно зверь заходит в терминал?

    просто у нас по ярлыкам терминальным

    а компы в домене

    Reply
  12. vde69

    (11) работает и в терминале и без, главное, что-бы у каждого пользователя была отдельная учетка (в принцепе может и вообще по локальным учеткам, но тогда надо все компы внести в список доменов)

    то-есть в терминал должны входить под доменными учетками а не все под одной, да и вообще так правильнее делать, может чуток больше гемора при регистрации пользователя, но зато можно права на папки нарезать

    Reply
  13. vde69

    (12) с опубликованными приложениями не знаю как будет работать, даже не думал на эту тему! может и будет а может и нет… Для нас это было не актуально

    Reply
  14. pavlo

    тоесть а пароли запоминает, в каком формате? 😉

    Reply
  15. vde69

    она пароли вообще не запоминает, и не сравнивает

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

    Можно общий пароль поставить для всех пользователей и всех конфигураций, но это скорее не нужно

    Reply
  16. vde69

    добавлен сканер файловой безопасности, подробности в документации

    Reply
  17. vde69

    хочу поинтересоватся, на сколько будет интересен коммерческий интерес если доделаю:

    1. вместо списков, деревья

    2. файл с настройками будет зашифрован и конфигурирование будет в диалоге

    3. типовые шаблоны для авто установки файловых прав

    4. возможность вставить перед запуском базы произвольный кусок реестра в ветку для выбраной базы

    5. отправку почты всем пользователям базы

    6. автоматическое добавление кода в гл модуль

    7. временное отключение базы из списка выбора

    ну и т.д. рюшечки (может кто еще чего посоветует)

    Reply
  18. Дуб

    (17) а целевая аудитория в этом случае — кто?

    Reply
  19. vde69

    (19) целевая аудитория будут «правильные» конторы с большим количеством баз.

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

    тем конторам которые ставят всем пользователям полные права на все — конечно она не нужна

    Reply
  20. ACE$

    мыслишка интересная… проверим у себя. Единственно, у нас не один терминал. В данном случае настроек нужно будет тоже хранить на всех серверах?

    Reply
  21. vde69

    (20) у нас серверов то-же много, но все настройки лежат в одном месте, конкретное решение будет зависить от Вашей топологии.

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

    Reply
  22. Julchik

    Интересная идея по закрытию. Правда у меня 1c+.exe выдает при запуске конкретной базы то есть файл настроек уже пройден выдает «Не удается найти указанный файл». Могу предположить что это файл запуска, но путь стандартный скопирован из обычной запускалки. Может для запуска ещё библиотечки нужны ?

    Reply
  23. vde69

    (22) для 1с+ никаких библиотек не нужно

    для самой 1с нужна административная установка на сервер

    другие базы с этого компа запускаются?

    Reply
  24. Julchik

    (23) Да при стандартном запуски 1с запускается и через «запускалки» при запуске 1c+.exe выдает только ошибку. Она ищет исполняемый файл? Административная установка не помогла. Может быть разница что запуск с рабочей станции без серверного ПО ?

    Reply
  25. Julchik

    (23) Да при обычном запуске кстати, процедура отлично отрабатывает полностью проходя проверку отладчиком, но очень понравилась идея только с базами доступными для пользователя, поэтому есть желание посмотреть через 1c+.exe

    Reply
  26. vde69

    (25) собственно проблемма решилась, путь к exe содержал пробел 🙂

    Reply
  27. vde69

    новенькое: блокировка базы от пользователей

    Reply
  28. vde69

    интересна версия с возможность указания глобальных параметров для каждой базы отдельно?

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

    Reply
  29. pavlo

    хотел попробовать и толку нет вовсе не показывает ничего, просто пустота, однако и user1 прописал в базе и в настройках путь до базы и файла запуска указал.

    кстати, описание более полное чем сам конф файл.

    Reply
  30. vde69

    (29) покажи файл настройки

    Reply
  31. pavlo

    вот 😉

    Reply
  32. vde69

    (31)

    убери вообще строку

    Separator=_

    и не должно быть пробелов в строке

    Root=C:Program Files1Cv77BIN1cv7s.exe

    Reply
  33. vde69

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

    user1_PHOTOLAND

    и еще в файле win все букы должны быть в верх. рег «kirilenko» — не пойдет

    Reply
  34. pavlo

    1. ну так написано же что если старые имена то без домена

    2. про имя большими буквами не слова в документации 🙂

    3. сама программа 1с лежит в таком каталоге и в другой перемещать у нас нельзя так как очень много на него подвязано.

    Reply
  35. vde69

    (34)

    1. про большие буквы для старых имен — не обязательно, для имен доменов — обязательно

    3. сделай административную установку платформы на сервере и все будет работать

    Reply
  36. pavlo

    всмысле административную?

    Reply
  37. JohnyDeath

    (32) А может можно как-нибудь подправить исходники, чтобы понимал пути с пробелами?

    Ведь не сложно же.

    Буду очень благодарен.

    Reply
  38. vde69

    (37) будет настроение — сделаю, там еще одно решение почти готово — использование разных каталогов EXE файла для разных баз.

    Reply
  39. JohnyDeath

    (38) Не хочу показаться наглым, но можно узнать когда у тебя будет настроение?

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

    Может хотя бы фикс с пробелами выложишь? Там ведь просто кавычки добавить (или я вообще ламер?)

    Reply
  40. vde69

    (38) может на этой неделе сделаю, мне там нужно доделать использование разных EXE а выкладывать старый билд профиксеный я особого смысла не вижу.

    Кроме того кавычки разные бывают 😀 и надо будет потестить на длинных каталогах (эта не явная проблемма старых систем которая не возникает сейчас, по сколько слитные имена каталогов в 500 знаком не делаюи, а вот с пробелами — бывает).

    Reply
  41. JohnyDeath

    (40) Уговорил 😀

    А можешь еще такую фичу добавить:

    Создать в ini-файле раздел [UsersAliases], в котором бы давались соответствия между именами пользователей Виндовс и 1С.

    Т.е. у меня, например, есть пользователь Виндовс с именем «Симпатяжкина», но в 1С она входит под логином «Оператор». При наличии в файле настроек строчек:

    [UsersAliases]
    Симпатяжкина=Оператор

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

    Reply
  42. vde69

    версия 2.1, профиксино:

    1. предупреждение если не найден исполняемый файл

    2. вывод в центр активного окна а не рабочего стола (были проблеммы с двумя мониторами и т.д.)

    добавлено:

    1. индикатор заполнения списка баз

    2. сохранение лога времени создания списка баз

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

    Reply
  43. orefkov

    Блин, когда уже люди прочистят мозги от шаблонов, навязанных 1С?

    Доколе можно издеваться над юзерами этим мерзким флажком «Монопольно» ?

    Трудно разве сделать ДВЕ отдельные кнопки — «Предприятие» и «Монопольно»?

    Reply
  44. vde69

    (43) дело вкуса, на мой взгляд флажек лучше чем кнопка, ибо нужно кликнуть 2 раза и значит вероятность ошибки меньше.

    а делалось именно максимально приближенно к внешнему виду штатной 1с

    Reply
  45. vde69

    чутор исправил версию 2.1, исправление только одно — увеличил размер окна на 5 пикселей, а то на висте появлялись скролы.

    Reply
  46. vadimkara

    Перед до мной тоже стала проблема безопасности попробуем ланчер

    Reply
  47. vadimkara

    Вобщем стала передо мной такая задача массовая смена паролей для всех пользователей подойдет данный ланчер для этого или нет?

    Reply
  48. vde69

    (47) нет, она предназначена для полного отказа от паролей

    Reply
  49. CheBurator

    (43) а это у тебя какая запускалка?

    Reply
  50. orefkov

    (54)

    Это моя личная, местечковая была запускалка.

    Reply
  51. stepman3

    хотелка:

    1. отключение режима работы по логин 1с = логин вынь

    2. + простая блокировка отдельных баз — просто ставим типа галочки напротив базы — и все не запускает

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

    Reply
  52. mstick
    stepman3 пишет:

    хотелка:

    1. отключение режима работы по логин 1с = логин вынь

    2. + простая блокировка отдельных баз — просто ставим типа галочки напротив базы — и все не запускает

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

    п.2 для меня тоже актуален.

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

    Спасибо!

    Reply
  53. CheBurator

    как же.. разбежались делать хотелки…

    Reply
  54. vde69
    Reply
  55. poyson

    Интересный вариант реализации. спасибо. +1

    Reply
  56. Pupok46

    Приветы, есть 3000 хочу потратить на доработку под себя.

    ICQ: 482199220

    Skype: Svoboden46

    E-mail: ir-da@yandex.ru

    🙂

    Reply
  57. Pupok46

    Забыл подписаться на ответы этой темы ))

    Reply

Leave a Comment

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