Справочник внутренних телефонов компании (из Active Directory)




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

28 Comments

  1. coder1cv8

    Класс!!!

    Reply ↓
  2. YAN

    Если потратить еще немного времени то можно настроить обмен данными между справочником Физ лиц и АД!!!

    (я так делал синхронизацию между 1С и АД по телефонам и прочим полям физических лиц)

    Reply ↓
  3. Fuego

    (2) Тоже идея. Хотя, я лучше не стану так делать 🙂

    Reply ↓
  4. vde69

    у меня из 1с загружаються и перемешаются пользователи в HelDesk заполняется E-Mail, добавляються и удаляться пользователи из групп AD, все функции по отдельности постил на мисте (давно уже),

    хочу прикрутить скрыпты для управления пользователями 7.7 (что-бы была связь с группой и пользователями AD)

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

    Reply ↓
  5. Lyudmila23

    Очень нужна такая програмуля. Скачала. Можно для «самых одаренных» подробней как ею пользоваться?

    Reply ↓
  6. Fuego

    (5) если Вы используете 1С:Предприятие 8.1, то Вам нужно скачать файл «Телефоны.EPF». Для 1С:Предприятие 7.7 нужно качать «Телефоны.ERT». И в той и в другой версии в меню файл в программе выбираете пункт «Открыть» и выбираем файл, который скачали. В открывшемся окне обработки в верхнем поле вводится фамилия, имя или что-то одно из них. А можно ввести только части, которые содержатся в имени и/или фамилии — как показано на скриншоте. Затем нужно нажать кнопочку «Найти/Поиск». Если по Вашему запросу что-то найдётся, то в широком поле отобразятся результаты поиска.

    P/S: Если Вы хотите использовать эту программу без 1С:Предприятия, то Вам следует скачать на рабочий компьютер файл «Standalone.HTA» и открыть его в проводнике двойным шелчком левой кнопкой мыши.

    Reply ↓
  7. Lyudmila23

    Спасибо!!!

    Reply ↓
  8. olegnu

    Коллеги! Скиньте ссылку на разработку на мисте. Заранее спасибо!

    Reply ↓
  9. Fuego

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

    Reply ↓
  10. olegnu

    (4) Если не трудно скиньте ссылку для скачки разработки на мисте.

    (8) Вопрос в том, что нужно в некоторых решениях 1С после заведения справочника пользователей, связанного с AD, нужно прописать телефоны и почтовые адреса из AD.

    Reply ↓
  11. andredozv

    Прошу совета как поступить у меня выдает вот такую информацию

    Возврат Скрипт.Eval(«GetObject(‘»+Путь+»‘)»);

    {C:1CV77INFOTELEFONY.ERT(4)}: :

    большое спасибо за совет.

    Reply ↓
  12. Fuego

    (11) скудная информация.. Сам код ошибки какой? А в домене ли компьютер? И какая система? Не 95 ли винда?

    Reply ↓
  13. andredozv

    (11) больше информации ни какой. Попробывал еще раз повторяет тоже самое.

    Сетевое соединение для интернета, больше ни какой передачи файлами нет.

    Винда XP SP3. Пробую все сам так как самоучка.Программирование 1С тоже составляю сам. Для учета бз по области всей организации афганцев. Если Я что не понял, или не правильно выразился прошу прощения.

    Reply ↓
  14. Fuego

    (13) компьютер в домене ли?.. Этот справочник работает на основе Active Directory, которая работает в домене.

    Reply ↓
  15. Armando

    Еще раз спасибо автору)) И вопрос: где можно посмотреть идентификаторы всех атрибутов для подстановки в запрос? Хочется контактную информацию по максимуму вырвать.

    Reply ↓
  16. Душелов

    (15) Если автор делал через WMI, что скорее всего, то можно воспользоваться http://infostart.ru/projects/3004/

    Reply ↓
  17. Armando

    (16) ADODB, но мне пох, хоть WMI. Только скажи, какой неймспейс и класс.

    Reply ↓
  18. Fuego

    (15) полный список полей можно увидеть и при помощи той самой утилиты, ссылку на которую привёл dushelov. Но там, если мне память не изменяет, поля с префиксом используются. А вообще, я пользовался справкой в Windows SDK 6.0.

    Reply ↓
  19. Fuego

    Для интересующихся структурой Active Directory рекомендую воспользоваться следующими ссылками на Active Directory Schema:

    Ссылка на схему в локальном SDK:

    ms-help://MS.MSSDK.1033/MS.WinSDK.1033/adschema/adschema/active_directory_schema.htm

    Ссылка в инете: http://msdn.microsoft.com/en-us/library/ms675085(VS.85).aspx

    Reply ↓
  20. eugene.shlyapin

    (4) дайте ссылку на Мисте, заранее спасибо!

    Reply ↓
  21. vde69

    (21) надоели, на: http://infostart.ru/blogs/1319/

    Reply ↓
  22. Fuego
  23. ms200999

    Идея полезная. Спасибо.

    Reply ↓
  24. rkuksa

    Уфф, спасибо большое за творческую идею и великолепную её реализацию.

    Теперь буду сопеть в выходные, копаться в коде всего того, что написали вы и посоветовали в комментариях.

    Reply ↓
  25. b-dm

    А нельзя ли как то обозначить какие из файлов, выложенных тут, что означают ?

    потому что название совершенно не адекватные…

    Reply ↓
  26. Fuego

    (27) b-dm, можно. И я это сделал. Читайте описание, и обратите внимание на синие и красные буквы )

    Reply ↓
  27. b-dm

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

    А что за не 1С-ный файлик приложен, он исполняемый ?

    Reply ↓
  28. Fuego

    (29) b-dm, (29) b-dm, этот файл является автономным гипертекстовым приложением, которое будет работать под ОС Windows. Код этого приложения можно просмотреть в любом текстовом редакторе.

    Reply ↓

Leave a Comment

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