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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *