Внедрение 1С на судостроительном заводе




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

30 Comments

  1. kare

    бодро)

    Reply
  2. Fox-trot
    который находится далеко отсюда – на Амуре

    откуда «отсюда»? от дефолтного города что ли?

    Reply
  3. user_2010

    Интересно: какой штат программистов? Бухгалтерия 2.0? Как с обновлениями — при такой переработке системы?

    Увеличилось ли количество бухгалтеров, операторов…(особенно при внедрении БИТ.Финанс)? Какие кадровые изменения имели место быть?

    Насколько я в курсе блок ЗУП в УПП соответствует конфигурации ЗУП? Для чего тогда именно УПП? Знаю практику обратную: весь учет в УПП, а зарплату в ЗУПе — так как ЗУП приходится часто обновлять.

    Планирование затрат, управление закупками — это все дописывалось для Бух.2.0?

    Наверняка понадобится управление ремонтами?

    Итого вывод — выбор был верно сделан?

    Reply
  4. webester
    В ней хранится справочник материалов. Он огромный, в районе 80000-100000 различных

    У нас в городе (как раз там где этот завод), розничный магазин, справочник номенклатуры — 98к, Никто не считает его огромным. Нормальная наработанная база. Читал по диагонали, листал, искал детали внедрения(сколько спецов работало, какие блоки добавили, с какими сложностями столкнулись, что переписали, как было и как стало), пока внезапно статья не кончилась. Это же статья про внедрение 1С? Ну как вот эта например http://infostart.ru/public/166856/ ?

    Reply
  5. nodel0

    (2) Fox-trot, это с выступления с infostart event, поэтому «отсюда» надо воспринимать — «от СПБ» 😉

    Reply
  6. nodel0

    (3) user_2010, отвечу по порядку

    какой штат программистов?

    штат менялся со временем, основной костяк 4 человека. Максимум был 7.

    Бухгалтерия 2.0?

    Изначально 2.0, потом перешли на 3.0.

    Как с обновлениями — при такой переработке системы?

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

    Увеличилось ли количество бухгалтеров, операторов…(особенно при внедрении БИТ.Финанс)?

    Операторы в ОИТ были сокращены (которые работали с мейнфреймовскими задачами), часть людей ОИТ переквалифицировалась с дельфи на 1С. Количество сотрудников финансово-бухгалтерских служб, осталось примерно на том же уровне, но функций у них прибавилось (до Бит.Финанс похожий функционал казначейства был в самописной системе). Потом загрузка по строительству увеличилась, людей стало больше, но не значительно, может быть в районе 10-15%.

    Насколько я в курсе блок ЗУП в УПП соответствует конфигурации ЗУП? Для чего тогда именно УПП?

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

    Планирование затрат, управление закупками — это все дописывалось для Бух.2.0?

    Да.

    Наверняка понадобится управление ремонтами?

    В этом году внедряем 1с-документооборот. Управление ремонтами думаю начнем делать зимой-весной.

    Итого вывод — выбор был верно сделан?

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

    Reply
  7. nodel0

    (4) webester, Роман, я сначала думал сделать со скринами форм из 1С, но они кажутся уже такими опостылевшими (да и каждый добавленый док с внешним отчетом не будешь же скринить), поэтому выбор пал на такой графический формат представления 🙂

    Reply
  8. Lapitskiy
    у нас в городе найти квалифицированных внедренцев непросто

    Их везде непросто найти….. даже в дефолт-сити.

    Reply
  9. Lapitskiy
    а подключать удаленщиков мы не можем в силу специфики нашего предприятия

    = мы не знаем как это делать (зато честно).

    Reply
  10. nodel0

    (9) Lapitskiy, дело скорее не в технической стороне вопроса, как сделать vpn с континентом совсем не секрет, проблема с источником финансирования привлечения, ведь ГОЗ дает нам не более 3млн с одного контракта на непрямые платежи.

    Reply
  11. user_2010

    еще вопрос: интересно: как такое крупное предприятие устраивает функционал 1С.Бухгалтерии? даже чисто в плане бух учета? как-то странно звучит: функционал Галактики не подошел, а 1С.Бухгалтерия подошла????

    А 1С.ERP примеряли на себя?

    Reply
  12. Артано

    (11) user_2010, я полагаю автор достаточно на эту тему высказался в тексте статьи. Возможности доработки и сопровождения у 1с много богаче. Хотя бы в силу её распространенности и бОльшего числа специалистов на квадратный метр.

    Автору и вашей команде большущий респект, за то что ЗЛК наконец,то сдвинулся с мертвой точки и начал двигаться в сторону развития. Тут самое главное не увлекаться, и не делать автоматизацию ради автоматизации)

    Reply
  13. Артано

    (4) 98к позиций загруженных из типовых прайсов поставщиков за несколько лет это не то же самое, что 80-100к деталей, материалов, инструментов использующихся в производственном процессе и хранящихся как 30-40 лет назад на бумажных носителях. Что с чем обычно в народе рекомендуют не сравнивать, я полагаю, можете догадаться сами

    Reply
  14. romansun

    (13) (4) (0)

    Это именно Материалы, которые Материалы в ЕСКД? Если да, то 100.000 материалов — это оооооочен много, да ))

    У нас в PMD-системе на заводе, который делает паровозы было около 3000 материалов.

    Уточню, материалы — это, к примеру

    Жесть белая 45-II-ГГЖР ТУ14-1-4214-87

    Лист (8 ГОСТ19903-74)/(Ст3сп ГОСТ14637-89)

    Круг (30 ГОСТ2590-88)/(55С2 ГОСТ14959-79)

    Нитки хирургические N 8 ГОСТ396-84

    Сольвент нефтяной ГОСТ10214-78

    Ткань Т-11 ГОСТ19170-2001

    и т.п.

    Прочих и Стандартных вместе — около 15’000 позиций

    Деталей — 120’000

    Сб. единиц — 45’000

    Reply
  15. romansun

    (0) а уточните, если не сложно, сколько у вас на один средний корабль скажем сб. единиц и деталей? И сколько уровней вложенности сборочных единиц выходит?

    Reply
  16. romansun

    (9)(10) удалёнщики? А первый отдел как к этому относится? 🙂

    Reply
  17. CheBurator

    и на оборонном заводе МСФО — для чего?

    Reply
  18. nodel0

    (17) CheBurator, отчетность в стандартах МСФО требуется при выпуске буклета для допэмиссии ценных бумаг акционерных обществ + для сборки общегруппового МСФО в ОСК.

    Reply
  19. nodel0

    (16) romansun, конечно плохо, режимщикам валю дай мы бы так и считали на счетах 🙂

    Reply
  20. nodel0

    (14) romansun, да, это из ЕСКД (группы которые ведут ЛОТ и Прометей), примерно такие:

    00374011282 ПРУТОК Ф30 БЕЗ ТО НЕТРАВЛ, 40Х, ГОСТ 4543-71, ГОСТ 2590-88

    00543714707 ЛИСТ 3х1250х2500, 10ХСНД, ТУ14-1-340-72, ТУ14-1-340-72

    03420603001 Углеродная ткань-1270-(+45/-45)-420 Сб 42101 ТУ1916-011-61664530-2012

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

    Reply
  21. webester

    (13)Хранятся на бумаге они или нет, для вас это наверняка проблема, для ИС это вопрос десятый. Нас интересует именно ИС. У нас позиция в базе, тоже не просто строчка в таблице. По ней всегда есть движения по регистрам закупок, продаж, остатки на складах, себестоимость, партии и тд. Все это хранение оборотов, итогов, документов, табличных частей, версий. Я не знаком со спецификой и мне разница неочевидна. Можете вместо того, что бы умничать объяснить почему ваши 98к это целых 98к! А наши и не стоит даже с вашими сравнивать?

    Reply
  22. nodel0

    (15) romansun, сходу не могу сказать, это в производственной системе у нас крутится, не в 1С, поинтересуюсь напишу порядок цифр.

    Вообще, насколько мне известно в машиностроительном блоке ведется разузловка изделий до материалов первичных, это имеете ввиду?

    Или сборочных единиц оборудования различного? вроде такого:

    12900081079 Переходник ДВИЕ.753136.023

    12900081084 Переходник ДВИЕ.753138.029-02

    12911144013 Клапан ИЮКЛ.491125.006-01 (521-35.3451-02)

    12911244035 КЛАПАН ИТШЛ.491215.020 (521-35.3440)

    Reply
  23. nodel0

    (12) Артано, за респекты спасибо, передам людям 🙂

    «автоматизацию ради автоматизации» делать не придется, у нас же не газпром, очень много чего работает вручную и в бумаге 🙂

    позанимаемся сейчас документооборотом и управлением персоналом, а там дальше и СКУД подойдет с ТОИР.

    Reply
  24. romansun

    (22) не, интересно не до материалов, а просто до сборок самого нижнего уровня.

    Сб 100 — 1 уровень

    — Сб 100.10 — 2 уровень

    —— Сб 100.10.10 — 3 уровень

    —— Дет 100.10.10.001.

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

    Reply
  25. Артано

    (21) Я знаком как с заводской спецификой, так и с торговлей (розница и опт). И могу сказать, что все эти «есть движения по регистрам», большей частью малоиспользуемый хлам. Легкость с какой наполняется номенклатурой даже пустая база тоже представляю. Активный ассортимент универсального магазина от 10 до 50к позиций в зависимости от степени универсальности. Всё остальное товар вышедший из употребления. Разве что для аналитических отчетов, но и здесь в качестве объекта анализа выступает не какая-то позиция в справочнике, а более крупные сегменты.

    За всё остальное ответить не могу, ибо не работаю на этом предприятии

    Reply
  26. CheBurator

    (18) Понял, спасибо

    Reply
  27. CheBurator

    На ИС есть хорошая ветка по разулованию.

    там упоминалось, что разузлование до самого нижнего уровня какого-то тепловоза — просто неимоверные ДЕСЯТКИ ТЫСЯЧ номенклатур.

    Reply
  28. romansun

    (27) да, увидеть разузловку АПЛ, думаю, было бы вредно для здоровья ))

    но так хоть…. какие-то общие цифры узнать на какой-нить сторожевик — было бы интересно

    Reply
  29. nodel0

    (28) romansun,

    по сборкам ситуация следующая:

    Уровень 0 — это само изделие

    уровень записей

    ======= =======

    0 6591

    1 28232

    2 15869

    3 3048

    4 586

    5 184

    это пример для такого корабля — https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D0%B2%D0%B5%D1%82%D1%8B_%D0%BF%D­1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_20380

    Reply
  30. romansun

    (29) ага,..

    корвет — 6 уровней вложенности, 54тыс сборок.

    ясн, спасибо… паровоз тоже уровней на 5-7 выходит. Сборок в основном поменьше, конечно. Но также несколько десятков

    Reply

Leave a Comment

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