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

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 не будет опубликован. Обязательные поля помечены *