Очистка краткого наименования контрагентов от мусора (типа ОАО БТ) для 8.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='\

21 Comments

  1. Аквастайл

    Очень пригодилась!!!

    Reply ↓
  2. pata

    Спасибо! Как раз то что доктор прописал.

    Reply ↓
  3. Вячеслав Л

    Спасибо, нужная штука!

    действительно, сколько пользователя не учи, все равно набивает и ООО и ОАА и т.д

    Reply ↓
  4. PolAlex2

    Удобно еще встроить код обработки в саму форму ввода контров -чтобы не давать такие записи делать или на лету при записи менять наименования.

    Reply ↓
  5. zhleonid8

    спасибо

    Reply ↓
  6. zhleonid8

    ещё бы неплохо по унн вытаскивать из справочника из архива

    Reply ↓
  7. PolAlex2
    zhleonid8 пишет:

    ещё бы неплохо по унн вытаскивать из справочника из архива

    поясни плиз, не понял пожелания

    Reply ↓
  8. AlexO

    Дополнительные сокращения:

    ФБУЗ,ФГУП,НП,НПО,НПФ,НСК,НТК,ПКО,НОАО,ГОУ,ГБУ,АК,АКБ,МПФ

    Reply ↓
  9. PolAlex2

    (8) AlexO, спасибо, добавлю в след. версии.

    Reply ↓
  10. AlexO

    (9) даже точнее как-то так :)) :

    1 уровень: ФБУЗ,ФГУП,НП,НПО,НПФ,НТК,ПКО,ПКФ,НОАО,ГОУ,ГБУ,АК,АКБ,МПФ,ИК,СК

    2 уровень: ФБУ,ГСК,НСК,КБ (ТД,НПП и НПЦ — есть в шаблоне)

    3 уровень: Ф-Л,Ф-л,ф-л,ФИЛИАЛ,Филиал,филиал,ФИЛ-Л,Фил-л,фил-л

    Т.е. сложносоставные формы собственности должны в обратном порядке идти — от частных к общему.

    Примеры:

    Филиал АКБ «Банк Рам» (ОАО) в г.Москва -> Банк Рам АКБ в г.Москва филиал, ОАО

    Филиал ОАО «РусГидро»-«Ботайская ГЭС» -> РусГидро — Ботайская ГЭС филиал, ОАО

    ГБУ НО «Госкладуправление» -> Госкладуправление СО, ГБУ (здесь СО — обозначение области)

    АКБ «Вертикаль Банк» (ЗАО) -> Вертикаль Банк АКБ, ЗАО

    ООО ПКФ «Геликон» -> Геликон ПКФ, ООО

    ЗАО НПФ «Байкал» -> Байкал НПФ, ЗАО

    ООО НСК РТР -> РТР НСК, ООО

    ФБУЗ Медицинский центр ФМБА -> Медицинский центр ФМБА, ФБУЗ

    Reply ↓
  11. AlexO

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

    Reply ↓
  12. AlexO

    Вот еще некоторые сокращения — общие для названий (это если по (10) — уровень 2):

    ДПО,НОУ ДПО,ДПОВ,УЦ ДПОВ,ТК,ГК,ТГК,СМУ,СМО,ПСК,ПСФ,МСМП,СКБ,ГСКБ,УПЦ,НТЦ,НПЗ,МНПП,ГМНПП,АУК

    С формами собственности образовательных учреждений (ДПО, НОУ ДПО, ДПОВ, УЦ ДПОВ) несколько сложнее:

    — если НОУ ДПО (негосударственное образовательное учреждение дополнительного профессионального образования), то «Ботаник ДПО, НОУ» как-то не скажешь, надо «Ботаник, НОУ ДПО». А если «Ботаник УЦ ДПО, НОУ» (УЦ — учебный центр), то вроде как все нормально.

    Поэтому получается, нужно и «ДПО» отдельно, и «УЦ ДПО», и «НОУ ДПО» (тоже самое и с ДПОВ — дополнительное профессиональное образование взрослых).

    Reply ↓
  13. AlexO

    Вот еще нашлось — НОЧУ ДПО УЦ:

    «Негосударственное образовательное частное учреждение дополнительного образования»

    Остальное — по (12).

    Кстати, для ДПО (ДПОВ) еще возможны варианты с УПЦ (Учебно-производственный центр).

    ФГБОУ ВПО — Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования.

    Остальное — по (12).

    И еще:

    ГОУ ДПО ЦПК <название> — Государственное образовательное учреждение дополнительного профессионального образования (повышения квалификации) специалистов Центр повышения квалификации.

    Отдельно ЦПК, наверное, нет, тогда будет:

    <название> ЦПК, ГОУ ДПО

    ГОУ ВПО — Государственное образовательное учреждение высшего профессионального образования

    ГОУ ВПО <название> — думаю, здесь также надо переносить все вместе:

    <название>, ГОУ ВПО

    Reply ↓
  14. AlexO

    Еще примеры и сокращения.

    ОП — обособленное подразделение.

    Пример: ОП ООО «<Фирма название>» «<филиал название>» — обособленное подразделение Общества с ограниченной ответственностью такое-то.

    Думаю, достаточно будет:

    «<Фирма название> — <филиал название> ОП, ООО»

    Сюда же — ЧОП (Частное охранное предприятие):

    «ООО ЧОП <название> — <название> ЧОП, ООО»

    ПФ — производственная фирма:

    «ЗАО ПФ <название> — <название>, ЗАО ПФ»

    ОСАО — Открытое страховое акционерное общество

    Стародвинский филиал АКБ «Сеньга» (ОАО) -> Сеньга АКБ филиал г. Старая Двина, ОАО

    ФГУП НИПИ — Научно-исследовательский приборостроительный институт

    «ФГУП НИПИ <название>» преобразуем в «<название> НИПИ, ФГУП»

    ММУ — Муниципальное медицинское учреждение

    «<название>, ММУ»

    МБУ — Муниципальное бюджетное учреждение

    «<название>, МБУ»

    Reply ↓
  15. AlexO

    Еще немного федеральных форм собственности:

    ФГОУ ВПО — Федеральное государственное образовательное учреждение высшего профессионального образования

    ФГОУ СПО — Федеральное государственное образовательное учреждение среднего профессионального образования

    ФГУ — Федеральное государственное учреждение (было, стало: ФГБУ)

    ФГБУ — Федеральное государственное бюджетное учреждение (стало, было: ФГУ)

    ФКУ — федеральное казенное учреждение (это из ГУФСИН)

    Всероссийское ЗАО:

    «Всероссийское ЗАО <название> — <название>, Всероссийское ЗАО»

    ГУЗ МО МИАЦ — Государственное учреждение здравоохранения Московской области медицинский информационно-аналитический центр:

    «ГУЗ МО МИАЦ — МИАЦ, ГУЗ МО»

    Есть еще «Государственное Бюджетное учреждение здравоохранения»:

    «ГБУЗ МО Медицинский информационно-аналитический центр — <название>, ГБУЗ МО

    Reply ↓
  16. AlexO

    еще из областных сокращений:

    ФКУ АО — финансово-казначейское управление административного округа

    ГФКУ — главное финансово-казначейское управление

    КГБУЗ — краевое государственное бюджетное учреждение здравоохранения

    ОГБУК — областное государственное бюджетное учреждение культуры

    — городские:

    МУК — муниципальное учреждение культуры

    МУК — муниципальная управляющая компания

    МОУ — межрегиональное общественное учреждение

    МОУ — муниципальное образовательное учреждение

    МОУ МУК — муниципальное образовательное учреждение межшкольный учебный комбинат

    МОУ СОШ — муниципальное общеобразовательное учреждение средняя общеобразовательная школа

    МОУ ДОД — муниципальное образовательное учреждение дополнительного образования детей

    МОУ ЦДОД — муниципальное образовательное учреждение — центр дополнительного образования детей

    МОУ ДОД ЦДОД — Муниципальное образовательное учреждение дополнительного образования детей — центр дополнительного образования детей

    МОУК — муниципальное образовательное учреждение культуры

    СМОУ — среднее медицинское образовательное учреждение

    ВМУК — военно-морской учебный комбинат

    ГСОУ — государственное спортивно-образовательное учреждение

    ОГБУК — областное государственное бюджетное учреждение культуры

    МАУК — муниципальное автономное учреждение культуры

    ГАУ НСО — государственное автономное учреждение Новосибирской области

    ГАУК — государственное автономное учреждение культуры

    МСМП — малые, средние и микропредприятия

    Reply ↓
  17. PolAlex2

    А нет случайно общероссийского классификатора аббревиатур? подрубить бы его и все в шоколаде 🙂

    Reply ↓
  18. zhleonid8

    (7) имел ввиду по одному откатывать

    Reply ↓
  19. zhleonid8

    (17) присоединяюсь

    Reply ↓
  20. PolAlex2

    (18) zhleonid8, сорри, но все равно не понял :)))

    твой пост:

    ещё бы неплохо по унн вытаскивать из справочника из архива

    че есть «унн»? ИНН знаю, УИН (уник.ID) знаю, «унн» не знаю… и что значит «вытаскивать из справочника из архива»?

    какого архива??

    Reply ↓
  21. AlexO

    (17)

    да откуда? ))

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

    там же из разных законов, а кто и когда в России классифицировал «че-то там» из законов? есть сайты сокращений, но там именно сокращения, а не списки форм собственности…

    Reply ↓

Leave a Comment

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