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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *