Перенумерация Платежных поручений исходящих, ПКО и РКО




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

25 Comments

  1. Душелов

    Не нравится описание. Я не «жлоб».

    Reply
  2. tchsn

    (1) Ваше право, но во первых прежде чем ставить минус можно было предложить исправить, а во вторых плюсы или минусы я считаю надо ставить за обработку, а не за слова

    Reply
  3. Душелов

    (2) Исправляйте.

    По обработке:

    1. А чем типовой перенумератор не устраивает?

    2. Строка=»00000000″;

    Уверены, что у всех длина номер документов 8 символов? А не проще ли взять длину номера из метаданных?

    Reply
  4. tchsn

    (3) Уже наверное поздно исправлять. сделанного не воротишь. хотя нет исправлю так как привык свои обещания

    1.Если честно типовой даже не помню где он находится, да и проще написать было свой чем искать

    2.У всех этих документов длина номера 11 знаков 8 + 3 префикса, а как взять длину из метаданных я не знаю

    3. Если хочется что-то ещё пообсуждать давайте по личному сообщению. что бы не засорять комментарии

    Reply
  5. Душелов

    1. На диске ИТС

    2. Стоит почитать ЖКК, объект «Метаданные»

    3. Почему? А для чего комментарии? Только для восхваления автору?

    Reply
  6. tchsn

    1. Диска ИТС у меня нет

    2. Ответ наверное тот же

    3. Я просто думаю наша перебранка никому не интересна

    Reply
  7. Душелов

    1. Видимо 1С не лицензионная.

    2. Синтаксис-помощник никто не отменял.

    3. Где перебранка?

    Reply
  8. Душелов

    >или напишите, что Вам не понравилось

    Я именно это и пишу.

    Reply
  9. tchsn

    (8)

    1. Нет работаю с лицензией, но дома конечно же нет, а брать у того кого обслуживаю, а вдруг им пригодиться я же не хожу к ним каждый день. А в 1С можно многого и самому добиться.

    2. Синтаксис-помощник первый друг в написании программ, но вот как то метаданные я плохо понимаю.

    3. Перебранкой я называю наш спор.

    (9) Спасибо за то что убрали минус. Ведь тот кто пишет сам наверное заслуживает какой-то похвалы.

    >Я именно это и пишу.

    А я мало того стараюсь доказать что пишу сам, но и оперативно исправлять свои ошибки, недочеты или просто удовлетворять просьбы других, как это было с другой моей обработкой, где пришлось написать 4 варианта. Вот оттуда то пошел этот «жлоб», когда скачало народу много а откликов нет.

    Reply
  10. MRAK

    (10) ахринеть… «скачало народу много» — это 2 человека? иногда по несколько сотен скачивают, а откликов нет…

    Reply
  11. tchsn

    (11) Это не про эту обработку там же написано там скачек больше 60

    Reply
  12. Mickl

    Да, много чел. скачали… Но я один за 55 сойду.

    Reply
  13. tchsn

    (13) До каких пор ты будешь засорять мои комментарии?

    Reply
  14. Mickl

    Дашь 10 руб за плюс?

    Reply
  15. tchsn

    (14) Не дам перестань мусорить, а хочешь поговорить позвони

    Reply
  16. Mickl

    Ладно не обижайся! Шучу я

    Reply
  17. tchsn

    (17) Я не могу на тебя обижаться но поболтать мы можем и по телефону

    Reply
  18. KapasMordorov

    Вредная обработка, в части «Перенумерация Платежных поручений исходящих».

    Надеюсь понятно почему.

    P.S.

    Не скачивал.

    Reply
  19. Yashazz

    Я уж не говорю, что и период нумерации не обязательно год. Целиком согласен с Душеловом.

    Reply
  20. tchsn

    (19) Не знаю почему вредная, она не проводит то что не было проведено, а в нормальной бухгалтерии платежки идут одна за одной

    А если не хочешь перенумеровывать платежки так не включай их и всё

    (20) В стандартной настройке да и в большинстве фирм нумерация документов начинается с начала года

    Reply
  21. tchsn

    Всем большое спасибо за плюсы которые поставили и которые ещё поставят

    Reply
  22. Одинец

    Неплохая обработка — жаль не учитывает Префикс. Непложо бы подправить этот косячок

    Reply
  23. tchsn

    (23) Вообще-то должна учитывать префикс, она его берет из организации, но если говорите что нет, хорошо проверю

    Reply
  24. tchsn

    (23) Проверил у меня префикс использует, префикс берется из выбранной организации, длиной не более 3(стандартная настройка)

    Reply
  25. sbk

    Огромное спасибо, отличная программа!!!

    Reply

Leave a Comment

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