"Автоматизатор" , конфигурация для автоматизации бизнеса Франчайзи.




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

16 Comments

  1. script

    Предлагаю Вам добавить следующий функционал.

    Я себе добавил в свою базу, которую делал на основании 1С:Деньги 1.0.

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

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

    У меня это происходит следующим образом:

    1. У меня есть список клиент-база (платформа, тек.релиз у клиента)

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

    2.1. Для этого в выполняяю парс. и разбор сайта 1С, страницы с новыми релизами.

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

    4. Предположим я обновляю по удаленке очередную базу и после этого записываю в таблицу выполненных работ какую базу я обновил и сколько часов это заняло.

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

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

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

    8. Теперь после выхода нового релиза я знаю что мне нужно обновить 20 баз иа это уйдет 40 часов, значит я неделю буду заиматься только обновлением. Значит текущие задачи нужно отложить на неделю а новые брать на следующую неделю. Таким образом у клиентов и у меня спадает напряжение. Все знают когда получат то, чего хотят.

    Вот кстати моя статья про 1С:Деньги, в которой я немного описываю этот блок. Там есть картинки

    http://infostart.ru/public/155307/

    Reply
  2. awk

    Интересно… Пока мои пять копеек:

    3000 строк кода в самой конфигурации и ~1500 строк кода скриптов со стороны серной
    Reply
  3. awk
    Автоматический учет времени проведенного сотрудником у клиента, исходя из истории GPS координат, полученных со смартфона

    Геолокация — это энергозатратный функционал. Будет кушать много батарейки. А вот заполнение отчета по работе на мобильном устройстве и в офисе пригодится…

    Reply
  4. DimkoZah

    Еще 5 копеек — Название конфигурации при запуске «Библиотека стандартных подсистем»

    Reply
  5. DimkoZah

    лично я использую бесплатный архиватор 7-zip. у Вас возможно использование только winrar

    Reply
  6. d.pag

    При добавлении нового клиента и создании нового контактного лица указал только ФИО. Вышла ошибка при сохранении. {Справочник._Tools_КонтактныеЛицаКлиентов.Форма.ФормаСписка.Форма(68)}: Поле объекта не обнаружено (КонтактнаяИнформация)

    Результат=Элементы.Список.ТекущаяСтрока.КонтактнаяИнформация.Найти(ПолучитьВидНаСеревере(«EmailКонтактногоЛица»),»Вид»);

    Версия 0.2.1.0 от ноября 2014

    Reply
  7. unichkin

    Ничего себе, вот это сервис) Очень понравился ваш сайт, и сама идея сделать такое API. Хоть о релизах новых конфигураций узнаю из рассылки 1С, а за даже копеечные смс — жаба душит. Красиво и удобно сделан, видно что с душой. Блок мне очень понравился, который можно себе на сайт повесить — порекомендую своему руководителю.

    Reply
  8. 1c.pro.fun

    А как у Вас обстоят дела с интеграцией с основной учетной системой? Ведь бух. учет в организации ведется в БП 3.0 вероятно? Вы изначально решили что они не должны быть связаны между собой — отдельно учет деятельности 1С:франчайзи и отдельно бухгалтерский? У нас например для целей внутреннего учета деятельности франча были сделаны дописки непосредственно в БП 3.0. Не скажу что это сплошные плюсы… типовые обновления выходят с такой периодичностью что при текущей загруженности порой некогда свою нетиповую БП обновлять. Но однако же налицо общие для двух «контуров» учета справочники — Контрагенты, Контактные лица, Сотрудники. Да и появляется возможность ввода типовых бух. документов на основании франчевских «движений».

    Вот примеры пересечения двух контуров:

    1. Учет проданных коробок по рег.номерам — у нас реализован через доп. реквизит в ТЧ документа Реализация — продали коробку — рег. номер «привязался» к Контрагенту.

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

    3. Опять про ИТС — явно на основании документа «ознаменовывающего» будущее продление договора (грубо говоря заявка на ИТС в статусе «план») может быть автоматически создан счет на оплату.

    Думаю этот перечень можно было бы продолжать. Так что по моему мнению тут просится некая интеграция, желательно «бесшовная» :). Если при этом сама типовая осталась бы в «типовом» виде — это согласитесь было бы вообще сказкой — обновляй хоть с закрытыми глазами! К сожалению тема интеграции и обменов далеко не мой конек, но вероятно здесь подошло бы COM-соединение из самописной конфигурации для франча к типовой БП 3.0 / УТ / УНФ (смотря в чем ведется учет).

    Простите за некоторую сумбурность изложения.

    Reply
  9. Logarifm_Andre11111111111111

    Очень полезный и удобный ПП для 1С франчайзи.

    Подумать о добавлении следующего функционала:

    1. Создание и обработка заявок от клиентов (учесть возможность срочности решения поставленной задачи) и дальнейший контроль с выводом напоминаний о выезде или о просрочке задания.

    2. Плюс к п.1. оповещение сотрудников о новых заявках от клиентов по почте или через мобильное приложение 1С (МП). Причем настройка двустороннего обмена:

    — БД->МП, для выгрузки оповещений сотрудников о новых заявках

    — МП->БД, для внесения в БД информации о выполненной заявке (для оперативности получения информации в офисе, это в дальнейшем можно использовать например для системы менеджмента качества выполненных работ специалистами)

    Reply
  10. Logarifm_Andre11111111111111

    Еще придумал…)))

    1. Может быть то уже излишне, но..

    Раз уж храним информацию о релизах, то было бы интересно знать об «Учете изменений в конфигурациях», который можно получить и отслеживать http://v8.1c.ru/lawmonitor/lawchanges.jsp

    2. Хранить информацию о количестве ПК на которых запускается 1С, т.к. часто при обновлении релизов 1С, необходимо обновить и платформу. Буквально вчера обновил релиз БП 3.0 и платформу на одном ПК, а на втором по «спешке» упустил и сейчас приходится отвлекаться от задач доделывать вчерашнее.

    Reply
  11. Malfarion

    (10) Logarifm_Andre, Именно изменения в конфигурации есть, для каждого релиза качается файлик с изменениями. «Изменения в версии».

    По поводу сбора информации со всех ПК на которых запускается 1С, я думал над этим, но пока не собираюсь реализовывать.

    Reply
  12. Logarifm_Andre11111111111111

    (11) Наверное не правильно высказался)))). Не изменения в обновлениях, а информация о «Мониторинге изменений законодательства и планы по их реализации в программах фирмы «1С». Это разные вещи.

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

    Reply
  13. Uncore

    В тексте публикации на картинке, где изображен телевизор с клиентами — Названия контрагентов замазаны. А в скриншотах к публикации, в списке, эта картинка изображена с названиями контрагентов. Похоже, туда залили не отредактированный файл.

    Reply
  14. SERJ_1CC

    В настройках программы увидел закладку «Asterisk», хотелось бы узнать какие планы были на данную программу АТС или может что-то уже реализовано?

    Reply
  15. Prisian

    Интересная разработка. Решил зайти на Ваш сайт(сайт проэкта) и зарегистрироватся. Но при регистрации выдает ошибку на капче: Не выводится проверочный код. Пожалуйста исправте данную ошибку.

    Reply
  16. warrior1985

    Не качайте, проект явно мертв.

    Reply

Leave a Comment

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