Управление задачами в 1С — готовая подсистема с открытым кодом и широким базовым функционалом. Версия 1.0.6




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

36 Comments

  1. snogl

    К конфигурации не привязано? На УТ 11.4.6 будет работать?

    Reply
  2. for_sale

    (1)

    Да, конечно!

    Более того, будет работать вообще на любой конфигурации, будь то типовая или самописная

    Reply
  3. AlX0id

    Осталось добавить листу учета рабочего времени — и франчайзи будут счастливы )

    Хотя… да каждый из них уже свою написал..

    Reply
  4. Wolfis

    с постановок задач, ржали всем отделом.

    Reply
  5. the1

    (3) Да уж, точно. Что называется сравните. Писал для своих нужд

    Reply
  6. for_sale

    (4)

    жиза, так сказать)

    Reply
  7. for_sale

    (5)

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

    Но это и понятно — идея-то одна, в принципе все системы этого плана схожи, ничего странного.

    Reply
  8. Perfolenta

    (3) аналогично, мой собственный вариант похож на представленный как из одного инкубатора вылупились… 🙂

    Reply
  9. Evil Beaver

    Постановка задач — супер. А почему еще один таск-трекер, а не гитлаб/джыра, например?

    Reply
  10. for_sale

    (9)

    Не совсем понял вопрос. Почему название такое или почему разработка на эту тему?

    Если про разработку, то просто надоело собирать коммуникации по проекту в мессенджерах-почтах-телефонах, поэтому решил заиметь систему управления задачами. При этом никаких особых заморочек нужно не было (и до сих пор не нужно), задачи, статусы, коммуникация, трудозатраты. Нужно было просто-удобно-быстро-бесплатно, плюс желательно на 1С. Поиск ничего не дал, всё или платное, или сложное, или какое-то… не по принципу «ешь еду своей собаки» 🙂 Поэтому решил сделать самостоятельно. А так как я не люблю коленное программирование, то сразу сделал по-человечески. Ну а сейчас решил поделиться, вдруг понадобится кому-то.

    Reply
  11. Artem-B

    А оповещений по e-mail нет ?

    Reply
  12. for_sale

    (11)

    Оповещений нет. Это уже то, что можно доработать под свои нужды)

    Но если вдруг когда-то это появится, то выложу, конечно.

    Reply
  13. for_sale

    Вышло обновление 1.0.1

    Reply
  14. talych

    А подзадачи есть?

    Reply
  15. for_sale

    (14)

    Подзадач как таковых нет, но если нужна именно группировка, то есть справочник Группы задач.

    Reply
  16. talych

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

    Reply
  17. for_sale

    (16)

    такого нет

    Reply
  18. for_sale

    Вышла версия 1.0.3

    Reply
  19. chinaski

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

    Reply
  20. for_sale

    (19)

    Совершенно верно, это именно отдельная конфигурация.

    Reply
  21. for_sale

    (16)

    Добрый день!

    В версии 1.0.5 реализовали ввод задач на основании других задач. Т.е. подзадачи.

    Reply
  22. for_sale

    Вышла версия 1.0.5

    Reply
  23. for_sale

    Вышла версия 1.0.6

    Reply
  24. GreenDragon

    Если gitlab и jira — сложно… ну тут только посочувствовать. Когда коту нечего делать, он пишет систему управления задачами.

    Reply
  25. for_sale

    (24)

    А вот и закомплексованные умники подтянулись! Вас обидело, что вас в одном из комментов поставили на место и вы пошли гадить по всем моим материалам?)) Завидую людям, у которых так много свободного времени:) Для убийства времени рекомендую Лурк (там про ваше «мневасжаль» есть хороший материал). Ну и срачи можно разводить вконтактике, например. Ну или политические форумы всякие есть, слышал там 24/7 такие же обиженные общаются. А тут я бы всё-таки попросил по делу. Т.е. алгоритм такой:

    Если ЕстьЧтоСказатьПоТеме() ИЛИ ЕстьКонструктивнаяКритика() Тогда
    ДоброПожаловать();
    Иначе
    Пока Истина Цикл
    Вконтактик();
    Политфорумы();
    КонецЦикла;
    КонецЕсли;
    

    Показать

    Reply
  26. for_sale

    (26)

    Большое спасибо за обратную связь! Ваше мнение очень важно для нас))

    Reply
  27. Xershi

    Очень интересно решение, где будет интеграция с трелло.

    Цель прочитать задачи в трелло, а на основе их делать комментарии в задачах, а затем их выгружать в свою учетную систему или интегрировать с ней.

    Reply
  28. wowik

    канбан доска есть/будет? мобильный клиент есть/будет?

    Reply
  29. for_sale

    (29)

    и то, и другое, планируется, пока не реализовано

    Reply
  30. K_Ilia

    канбан бы еще и совсем хорошо было бы

    Reply
  31. Xershi

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

    Reply
  32. DimonYarkin

    да уж очень сырой продукт. И почему бы не использовать стандартную библиотеку подсистем ну хотя бы для создания пользователей и Органайзера. А так можно доработать. Что и придется сделать. Ну ладно хоть начло положено))

    Reply
  33. for_sale

    (34)

    Именно поэтому данная система подана как начальная и не продаётся за деньги, а отдаётся за символическое поддержание дальнейшей доработки)

    Reply
  34. for_sale

    (34)

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

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

    Reply
  35. targetov74

    Добрый день,

    Подскажите по функционалу, можно ли перепоручать задачу и/или контролировать её?. Также, есть ли возможность согласовывать задачу несколькими лицами одновременно и по порядку? Есть ли возможность вложить файл в задачу? Заранее спасибо.

    Reply
  36. for_sale

    (37)

    Добрый день!

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

    Reply

Leave a Comment

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