Опыт крупных проектов автоматизации для правительства г.Москвы и ГК Газпром




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

34 Comments

  1. vikad

    Подскажите, пожалуйста, ссылку на статью по РАУЗ, которая Вам помогла

    Reply
  2. bondar_vy

    Добрый день.

    Можно по подробнее узнать про описанную конфигурацию. Посмотреть и может быть купить со временем.

    Reply
  3. Silenser

    А уважаемый автор имел какое-либо отношение к компании Инвестгазватоматика?

    Reply
  4. Andreev_N_O

    Вот статья про кэширование ключей в РАУЗ

    http://infostart.ru/public/306109/

    По-моему, что-то еще делалось…

    Reply
  5. Andreev_N_O

    >> А уважаемый автор имел какое-либо отношение к компании Инвестгазватоматика?

    Да, один из проектов по Газпрому был связан именно с этим названием, под эгидой Газпром Автоматизации на Саввинской набережной.

    А с кем имею честь?..

    Reply
  6. Steelvan

    Большой и жирный минус за постоянное использование американизмов ! Автор, ты русский язык знаешь ?

    Reply
  7. dgolovanov

    (6) Steelvan, Вам с Вашей американофобией к доктору надо.

    Reply
  8. vec435

    Скажите,пожалуйста, использовались в разработке методологии IDEF,UML?

    Reply
  9. YPermitin

    +

    Было интересно почитать. Спасибо!

    Reply
  10. Silenser

    (5) С бывшим руководителем отдела разработки вышеозначенной компании, в которой вы работали внешним разработчиком.

    Reply
  11. EMelihoff

    (6) Steelvan, работал в западной компании, где программист 1с был один я, остальные Java, PHP и т.п. Так вот в таких коллективах на «скрамах» общаются только на подобном «жаргоне» и люди уже привыкают и по русски даже не знают как сказать это. Проф деградация если хотите.

    Reply
  12. Andreev_N_O

    (8) vec435, конкретно в Газпроме по-моему нотация ARIS больше распространена — из тех компаний группы, где мне довелось общаться.

    UML — для Java хороша, а в 1С-то из нее сущности как сгенерить? Изобрели какой-то инструментарий?

    Reply
  13. Andreev_N_O

    (10) Silenser, а где сейчас?

    Reply
  14. leskovma

    Спасибо большое за статью, было интересно ее читать

    Reply
  15. Silenser

    (13) Крупный холдинг, преимущественно пищевка. Название не скажу 🙂

    Reply
  16. alex_4x

    Всё написано правильно. Но вот по поводу «Еще хочу сказать про разницу в отношении к коммуникационным проблемам у программистов и менеджеров.» хочу внести небольшое замечание.

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

    Reply
  17. tank68

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

    Reply
  18. ZLENKO

    «Но проблема в том, что мы не можем перевести на управляемые блокировки только один документ, мы должны перевести в этот режим все регистры, а значит, и весь функциональный блок. Это тяжелая работа, но, тем не менее, она оправдана.»

    В УПП это в свойствах конфигурации одно свойство поменять…

    В чем заключается «тяжелость» работы?

    Reply
  19. ZLENKO

    «программист сталкивается с организационной проблемой (главный бухгалтер у него не хочет принимать работу), он на нее обижается, объявляет ее ведьмой-чернокнижницей и говорит: «мы с ведьмами переговоров не ведем, мы их сжигаем на костре». Что он делает дальше? Он начинает искать единомышленников и собирает толпу, чтобы действительно эту ведьму сжечь. Но за последние 10 лет я не слышал, чтобы кого-то из управленцев сожгли, или хотя бы уволили из-за конфликта с программистами: они не достигают такой степени влияния в организации клиента»

    Конфликтовать с сотрудниками заказчика не стоит. Даже если они не правы. Нужно просто постараться минимизировать влияние этих людей на проект.

    Reply
  20. ture

    Скока платят программистам 1С в газпроме?

    И почему такой дурной тест на входе?

    Reply
  21. Богатырев Артур

    (17) alex_4x, я бы еще добавил вот что — автор статьи ставит, что программист ОБЯЗАН встречаться с представителями заказчика. И он такой-сякой будет с ними ругаться, сволочь…

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

    А то может быть ситуация — весь такой белый-красивый менеджер «общается», а во всех проблемах виноват… программист. Подход «во всем виноваты программисты» он конечно прикольный, но не неправильный — ибо заказчик с таким же успехом может быть невменяемым, обладать скверным характером, менять свои показания и т.п. А виноваты… программисты….

    Reply
  22. ZLENKO

    (22) Богатырев Артур, «А виноваты… программисты….»

    Ну а кто ж еще? 🙂 Какие есть варианты? Будете доказывать заказчику что он не прав?

    Reply
  23. capitan

    Год назад 1 БИТ презентовал похожий мега проект. И если покопаться на инфостарте найдется еще парочка похожих.

    При всех плюсах за решения по оптимизации БД они сникли при простом вопросе — А зачем ?

    Есть такое понятие как декомпозиция БД.

    Да, требование заказчика, чтобы все данные были в одной базе.

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

    Знатоки меня поправят, но в типовых решениях зарплата считается по организации, БП закрывает период тоже по одной организации и т.п.

    Т.е. простым РИБ по организациям можно свести супер мега дорогой сервер к нескольким.

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

    И автоматом решится задача с журналами регистрации.

    А если удачно написать правила обмена и уйти от РИБ, то в центральной базе будет сводная аналитика и все просто взлетит.

    Правительству Москвы это может и не сильно нужно, оно пил тратит бюджетные деньги, а вот акционерам Газпрома может быть интересно

    Reply
  24. Yashazz

    Заумные красивости. Эффектные рассуждения людей в дорогих костюмах и галстуках.

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

    …ах да, виноваты, естественно, программисты.

    Reply
  25. alex_4x

    Я ставлю публикации [+]

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

    В целом мне реально очень приятно видеть тут управленцев и очень приятно что они допускают обсуждение. Так мы и до комунизма и синергии доживём!

    Я могу написать короткий очерк. Важная роль руководителя проекта. Где его спина-ваша жопа. Где ваша спина — его жопа. Когда в команде «АДМИНИСТРАТИВНО» а не только по понятиям выстроены правильные внутренние коммуникации — начинается парадигма роста. Каждый, понимая суть, старается максимально улучшить продукт, каждый со своей стороны, барьера внутренних коммуникаций нет. Ах я забыл.Это уже плагиат. Это же А. Гарин. Гиперболоид Инженера Гарина.

    Reply
  26. Andreev_N_O

    (25) Yashazz,

    >> людей в дорогих костюмах и галстуках

    у вас откуда-то есть информация о стоимости моего костюма и галстука?..

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

    остальные могут себе позволить все обладатели значка «1С: Специалист «.

    или это вы какие-то свои комплексы продемонстрировали ненароком?

    >>Я тоже могу накатать такой трактат

    чтобы вы понимали, это не трактат, а стенограмма (с мизерными правками).

    если вы можете, вам следовало 1) заявить на конкурс примерное содержание, 2) за него бы проголосовали люди, 3) вы бы выступили на конференции, и 4) потом бы вам предложили опубликовать стенограмму выступления.

    если же вы как в том анекдоте, можете 30 раз за ночь, но только на словах — тогда да, остается писать такие посты.

    >>красиво изъясняющихся на изуродованном русском

    у вас в одном предложении — эпитеты «красивый» и «изуродованный», что является нарушением формальной логики. Марь Ивановна за такое сочинение вам влепила бы «2», уважаемый знаток русского языка, и хорошо еще если в психдиспансер не направила бы: «- мальчик считает, что изуродовать можно красиво.»

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

    если вам нужен какой-то особый жаргон, прошнурованный и с печатью, и только он для вас будет «профессиональным» — ничем помочь не могу.

    >>проекты с заваленными сроками

    от сумы да от тюрьмы, как говорится, не зарекайтесь.

    >>моменты, которые лично мне очевидны совершенно, да вот только бесполезны.

    а вы под каждой статьей сообщаете в пол тыщи знаков, что она вам бесполезна, или только под моей?..

    >> …ах да, виноваты, естественно, программисты.

    в статье, кстати, про вину ни слова не сказано — озвучена проблема, и способ решения — больше общаться с заказчиком и не зацикливаться на своих эмоциях.

    даже этот совет отдельные читатели умудрились принять на свой счет и воспринять эмоционально…

    Reply
  27. Andreev_N_O

    (19) ZLENKO,

    >> В чем заключается «тяжелость» работы?

    1. имеем конфу где нет упр. блокировок.

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

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

    4. оказывается, движения по этим регистрам делает еще 5 документов

    … проходит несколько дней …

    впрочем, сам перевод галочками действительно элементарен. =)

    Reply
  28. aspirator23

    Если статья позиционируется как опыт очень крупных внедрений, то оставляет странное впечатление.

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

    Посмотрите для сравнения видео о Деловых линиях.

    Кстати, если уж пригласили в МВТУ для написания курса об управлении проектами, посмотрите есть ли там та самая методичка. Или Лустин всех «развел»?

    2.Часть об управлении проектами — общеизвестные истины.

    3. Последняя часть — обрывочные абзацы, как будто их писала секретарь с диктофона,

    а не специалист которые постоянно работает с документами и съел на этом две собаки.

    «Очущение» такое, что единственное достоинство автора в том, что он умеет договариваться.

    Это отличное качество, и часто его достаточно для ведения успешных проектов.

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

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

    Во всяком случае такая статья была бы на инфостарте действительно оригинальной, а если «с опытом из первых рук» — так еще и интересна.

    Reply
  29. ZLENKO

    (28) «1. имеем конфу где нет упр. блокировок.

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

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

    4. оказывается, движения по этим регистрам делает еще 5 документов

    … проходит несколько дней … »

    Галочку достаточно поменять всего одну 🙂 в корне конфигурации.

    Блокировки прописывать не нужно — достаточно перейти на новую методику контроля остатков.

    Все.

    Reply
  30. ZOMI

    (30) ZLENKO, с таким подходом бюджет не освоить!) А как же переделка всех модулей и их дальнейшая поддержка?

    Reply
  31. varjag

    Что подразумевает автор под паттернами ? Автор понимает вообще значение этого слова ?

    Словоблудие какое-то.

    Reply
  32. Silenser

    (21) ture, Развенчаю миф о заработке программистов в Газпроме: большую зарплату там получают только люди с правильными фамилиями, которые подозрительно совпадают с фамилиями руководителей в головных организациях. В прямых дочках, зарплаты обычно не высокие, т.к. ограничены штатным расписанием, подвинуть которое есть задача на грани подвига. Поэтому, для того, чтобы нанять грамотного спеца используют дочерние организации (точнее, внучки), которые являются чисто коммерческими и штатка в них более лояльна к сотруднику. Зачастую может возникнуть ситуация, когда в отделе может сидеть несколько сотрудников из разных юр. лиц, но подчиняющихся формально одному руководителю.

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

    Однако, есть и плюсы. Обычно у сотрудников есть ДМС, оплачиваемый до 100% среднего заработка больничный, отпуск по ТК, ежегодная индексация оклада, нечастые переработки, премии ко дню газовика, на 8е марта и 23 февраля.

    Резюмирую: Можно ли много получать работая в структуре Газпрома — да. Является ли это правилом, только на основании того, что вы работаете в одном из юр. лиц Компании — нет.

    Reply
  33. artemusII

    Спасибо огромное автору за статью. Читал на одном дыхании. В отличие от статей похожей тематики проста для понимания. Хотелось бы увидеть еще статьи этого автора.

    P.S. Вопрос к автору: существует ли кратчайший путь (материалы, курсы и т.д.) чтобы обладать таким же опытом и знаниями как у вас?

    Reply
  34. Andreev_N_O

    (34) artemusII,

    Здравствуйте, вам спасибо за добрые слова.

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

    По 1С имеется не так уж много литературы, и если вы будете ее последовательно читать, вам никуда не деться от «Профессиональной разработки», и книги по «Эксперту».

    Что касается курсов, я сам особо никуда не ходил, зато ввязался в преподавание, и волей — неволей пришлось изучить все на нормальном уровне (по зарплате, например, были серьезные пробелы в понимании механизмов вытеснения, перерасчетов).

    Для расширения кругозора рекомендую не зацикливаться на 1С, а изучать другие языки — в моем случае Java, сейчас много читаю про Kotlin, думаю в нем есть потенциал.

    Также рекомендую таки изучать предметную область, технологии производства, чтоб не выглядеть профаном, когда вы к примеру внедряя ERP, будете пытаться консультировать производственников на уровне «ты верно сосчитал овец, но оставь в покое мою собаку». =)

    В моему случае это закончилось тем, что сейчас я пытаюсь на первом этаже дома из подручных материалов собрать фрезерный станок с ЧПУ, возможностями 3D печати из пластика и в будущем плазменной резки.

    Reply

Leave a Comment

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