Перенумерация документов




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

41 Comments

  1. Душелов

    Ура! 🙂

    Reply
  2. Ёпрст

    наконец-то дождались!

    Reply
  3. Душелов

    Плюс за идею!

    Reply
  4. XAH

    Ух! )) Спасибо парни! На нетиповых не тестил поэтому о глюках пишите — исправлю.

    Неужели никому не нужна была такая обработка раньше? я ее уже 2 раз пишу ..первую написал и потерял полгода назад.

    Reply
  5. Шёпот теней

    (4) это они над тобой «издеваются»… типа ухахатывются… но ты не обращай внимания… удачи во всем…

    воо-о-оот…

    Reply
  6. XAH

    :)) … На Здоровье!

    Reply
  7. Abadonna

    (1-3) Да ладно вам! 😉 Вчера мне, бац!, и понадобился вдруг перенумератор.

    Хотел уж было писать, да таки нашел в базе (наследство от прежних).

    Reply
  8. Abadonna

    (6) Вот нормальный, неконфликтный человек

    Reply
  9. ineoosaki

    (8) завидуеш наверно? :))))

    Reply
  10. CheBurator

    блин, я уже испугался.. неужели опять диск ИТС никто не смотрел (ну не весь, а хотя бы универсальные отчеты и обработки)…ффууу а потом отлегло — этож для 8-ки.. — тогда простительно…

    Reply
  11. poppy

    (10) Ты думаешь на ИТС нет перенумератора для восьмерки?

    Reply
  12. XAH

    Видимо не один я испытаваю изжогу при виде диска ИТС 🙂 … Это шутка

    Reply
  13. coder1cv8

    Даешь больше перенумераторов хороших и разных! )

    Reply
  14. artem666

    дык, а чем типовая не устраивает?

    Reply
  15. WiseSnake

    Жесть )))))))))

    Reply
  16. vasilykushnir

    (9) А почему бы и нет? Ребята пошутили, человек не залупился, а с пониманием отнесся к иронии (замечу беззлобной) — все нормуль. Перефразирую (13) — побольше форумчан адекватных и с чувством юмора!

    Reply
  17. DeepDiver

    Ставлю плюс!

    А Душелов интересный — мне за перенумератор сравочников МИНУС, а за документов перенумератор — ПЛЮСы раздаёт 🙂

    РЕСПЕКТ!

    Reply
  18. Душелов

    (17) Я в 6 комменте твоей разработки объяснил причину.

    Эту разработку я не плюсовал и не минусовал.

    Reply
  19. DeepDiver

    🙂

    ок

    не обижайся

    а этот интересный примерчик

    согласен 🙂

    Reply
  20. lion11

    Большой жирный плюс…

    Reply
  21. svegl

    Спасибо.

    А на ИТС по 8-ке такой обработки нет.

    Reply
  22. Душелов

    (21) 1CItsEXEEXTREPSUNIREPS81UniversalSelectionУниверсальны­еПодборИОбработкаОбъектов.epf

    Закладка «Обработки» — «Перенумерация объектов»

    Reply
  23. CheBurator

    (22) по (21) «аффтар жжот!»!!!

    Reply
  24. fedor40

    Хороша. Но надо сразу по всем документам.

    Reply
  25. fedor40

    (21) 1CItsEXEEXTREPSUNIREPS81UniversalSelectionУниверсальны­еПодборИОбработкаОбъектов.epf

    Каждый объект надо выбирать. А если префикс организации изменить нужно?

    Укликаться можно.

    Лучше эту дописать. Она простая и будет делать, то что ей скажешь. А не на 1с надеяться.

    Reply
  26. ALEANDR

    Спасибо большое:)

    Reply
  27. ppnikv

    класс. а я раньше столько мучался. огромное сибо

    Reply
  28. Alxxxx74

    Скажите, а нет такой же, только для перенумерации справочников? Меня интересует именно такая возможность: «…Начальный номер = 0 и Префикс заполнен значением — произойдет подстановка префикса с сохранением нумерации (замена первых символов, символами префикса)»

    Reply
  29. kimusik

    Огромное спасибо!!!

    Reply
  30. piton66

    Млин, номера то поменялись в доках, а нумератор то прежний остался. КАК исправить?

    Reply
  31. PastV

    Добрый день! Подскажите, можно использовать перенумератор на платформе 1С:Предприятие 8.2 (8.2.10.77) ???

    Reply
  32. akozhuhova

    Ооооооооооотличная обработка!! Очень помогла!! Спасибо! НО! Можно было еще сделать возможность изменять номер, не меняя существующий префикс, по скольку возможна ситуация, когда префикс строится из кода узла РИБ и префикса организации.

    Reply
  33. natalyshka

    Хочу выразить огромную благодарность тому, кто написал эту обработку!!!

    Спасибо приогромное!!!

    Наталья

    Reply
  34. pannamara

    Благодарствую))) разработчику

    Reply
  35. Selena1505

    Ух! )) Спасибо!

    Reply
  36. SvNik

    Очень полезная штука. Спасибо огромное

    Reply
  37. Liashov

    Молодец аффтар помогла твоя обработка, спасибо!!!

    Reply
  38. vetalhmao

    УниверсальныеПодборИОбработкаОбъектов.epf поиском в интернете нашел

    Reply
  39. v.a.ryag

    А мне нужно заменить переименовать докум енты с префиксом из 3-х символов к номерам с префиксом из 2-х символов, поможет?

    Reply
  40. radomicheva

    Спасибо очень экономит время

    Reply
  41. Mirared

    Эта обработка работает на конфигурации Управление небольшой фирмой?

    Reply

Leave a Comment

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