Аналогия процессов создания информационной системы и дома. Шутка с долей правды. Доля правды — 99%




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

18 Comments

  1. script

    Отлично. Вот бы моему прошлому заказчику почитать. Но уже поздно … 😥 Все тоже самое. Крыши нет — завезли мебель … начали завозить плазму вдруг поняли что она не пройдет через двери…. перекинули через отверстие для крыши … сейчас разламываем дверной проем, а то мало ли чего еще не пролезет……

    Reply
  2. Арчибальд

    😀

    Наконец-то прочел у соседа. Текст — мне на мыло, пожалуйста»

    Reply
  3. German

    Bpmn- вот ключ ко многим проблемам

    Reply
  4. (3) увидев суть сообщения в письме, решил зайти и заорать от радости! мол Ураа!!! хоть кто то из 1С это понимает!!! а когда увидел кто это написал афигел, впал в шок и не знаю че сказать )))

    Reply
  5. Alraune
    программы 1С Предприятие с их феноменальной универсальностью и жуткой сложностью для пользователей

    А в чем такая ЖУТКАЯ сложность? Если, к примеру, кладовщик в 1С работает, так он будет Приходный/Расходный ордер на товары забивать, и все. Научить (и научиться) этому несложно, а знать тонкости ведения партионного учета ему нет необходимости. То же самое – оператор, кассир и многие другие. Понятно, что тот, кто отвечает за ведение учета, должен знать программу на уровне, близком к совершенству, так там и уровень знаний и умений другой.

    К тому же, если 1С – жутко сложно, то как главбуху проще вести учет, в екселе?

    Reply
  6. Alraune

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

    Reply
  7. German

    (4) к моей персоне столько внимания потому то я когда то влепил Вам минус?

    BPMN давно использую, и ощущаю от него реальную пользу, изредка использую схемы в инструкциях.

    http://blog.1c-ei.ru/search/label/BPM

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

    1С выгоднее использовать в малом бизнесе, т.к. вся затратность с универсальностью гасится за счет услуги ИТС. и малому бизнесу это выгодно.

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

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

    что касается жуткой сложности, то и она есть. к примеру в Навижн, КАС БЛ или ДИРЕКТУМ многие функции интуитивно понятны. в отличие от 1С. где часть функций или не понятна, или названа так что не сразу и поймешь, или тупо отсутствует в документации. а т.к. порядка действий нигде нет, то вникнуть и разобраться в этом пользователям достаточно сложно.

    в общем все относительно. 1С самая сложная система из тех, которые мне встречались. и виной тому ее универсальность.

    и я не атеист 1С )) просто это ее объективный минус. который обходится как и любой другой минус в этом мире. наши минусы это продолжение наших плюсов. сложность это минус являющийся продолжением плюса — универсальности. и наличие грамотных инструкций это единственное решение по обходу этого минуса.

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

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

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

    (7) а что ты хотел? ))) у меня тот же подход. но меня удивил твой пример по разжовыванию справочника номенклатуры как идеал инструкции в твоем понимании.

    Reply
  9. Alraune

    (8)

    1С сложнее других менее универсальных и более простых учетных систем. называть не буду

    Если не называть, то это не считается за аргумент. Мне так кажется.

    эта же универсальность [1С] мешает быстро и дешево вносить изменения

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

    А в учетной системе (которую не хотите называть) все-таки вносятся изменения дешево или нет?

    Reply
  10. script

    Проблема в том что 1с стремится в крупный бизнес с своим менталитетом.

    Сложность появляется когда один человек пытается внедрить что то типа УПП потому что уже 10 и более лет внедряет разные пограммы малому и среднему бизнесу.

    Процесс очень простой…. Поставил 1С бух. … сотрудничаю уже много лет …. клиент покрупнел…. мне доверяет …. нужно что то серьезнее … может УПП ?…. и вот после этого начинаются проблемы — вот здесь действительно сложно.

    Опытному менеджеру проекта и в голову не прийдет идти на крупный проект с 1 программистом в штате, даже если у программиста большой опыт…. это нонсенс.

    Reply
  11. (9) на самом деле я их назвал ) просто чуть ниже )

    тот же Navision, DIRECTUM, КАС БизнесЛюкс. Эти системы понятны. Минимум галочек с кнопочками, без перегрузки интерфейса. КАС БЛ кто то называет русским SAP. Из-за масштаба их проектов. и да, почти во всех этих проектах используется 1С Бухгалтерия как прослойка между управлением и государством. из ИС выгружаются данные в 1С чтобы сформировать регламентированные отчеты.

    если говорить об аналогии к 1С, то хорошо подходит АСР Онима, тоже приходилось встречаться, позиционирует себя как 1С для провайдеров массовых услуг. Может считать хоть трафик, хоть звонки, хоть воду с теплом. Ей поборобану, а пользователю это надо освоить ) но это тяжело, особенно без инструкций ) и система как и 1С мне нравилась, отчасти именно своей сложностью, 3 месяца сам голову ломал чтобы понять ее логику и освоить, а потом 1,5 года ломал голову пользователям внедряя ее по филиалам ))

    А в учетной системе (которую не хотите называть) все-таки вносятся изменения дешево или нет?

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

    Reply
  12. Dementor

    (8)

    что касается жуткой сложности, то и она есть. к примеру в Навижн, КАС БЛ или ДИРЕКТУМ многие функции интуитивно понятны. в отличие от 1С. где часть функций или не понятна, или названа так что не сразу и поймешь, или тупо отсутствует в документации. а т.к. порядка действий нигде нет, то вникнуть и разобраться в этом пользователям достаточно сложно.

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

    Кстати, ваше замечание уже по немногу теряет актуальность. Посмотрите на рабочие столы БУхи и ЗУПа — в конце-концов все типовые и отраслевые решения будут переписаны в угоду эргономике.

    Reply
  13. Yashazz

    У типовых конфигураций 1С с разбором кода всегда было нелегко. Помню комплексную 7.7, ещё второго поколения, 1999 года, так и там в глобальном модуле можно было ногу сломить. Это скорее вопрос соглашений и дисциплинированности разработки, а не самой платформы. На любой системе можно накатать ясный код и чёткие принципы, а можно устроить кастрюлю с лапшой.

    Reply
  14. kittystark

    чем-то напоминает бородатый юмор «если бы программисты строили дома»

    Reply
  15. kittystark

    или вот еще YouTube

    Reply
  16. Sintson

    Какой смысл в этих аналогиях?

    Reply
  17. (16) смысл — понятие индивидуальное и субъективное.

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

    2. тем кто плюсанул тоже какой то смысл был виден.

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

    Reply
  18. tango

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

    Reply

Leave a Comment

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