Редактирование движений документа




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

26 Comments

  1. Talikvap

    Не работает версия 8.1

    Reply
  2. Fuego

    (1) чё за бред? Специально скачал сейчас, думал что мог не ту залить! Всё прекрасно работает!

    Reply
  3. Fuego

    (1) причём и к конкретной конфигурации не привязана! Как и все мои наработки лежащие здесь, и лежавшие когда-то.

    Reply
  4. Talikvap

    Не сохраняет изменения в движениях документа!

    Reply
  5. Fuego

    (4) а кнопочку «Сохранить» нажимал?.. При закрытии обработка не спрашивает, сохранять или нет. Просто закрывается форма редактирования и всё.

    Reply
  6. Salvador Limones

    От http://www.infostart.ru/projects/804/ сильно отличается?

    Reply
  7. Fuego

    (6) от моей точно сильно отличается. Логикой и устройством.

    Reply
  8. Fuego

    (9) а нафига редактировать движения удаленных документов? Я не расчитывал обработку на извращенцев 🙂 Рекламу тут решил оставить? }:-[

    Reply
  9. Fuego

    (11) это ты о чём, говоря про отношение? Пользователь вообще никак не должен иметь права удалять документы без проверки ссылочной целостности. Запомни одно из правил хорошего тона программиста: никогда не давай обезьяне гранату! Задач программиста-администратора защитить пользователя от него же самого (пользователя)…

    Reply
  10. Fuego

    (13) проверкой ссылочной целостности.

    Reply
  11. Fuego

    (16) понятие «РИБ» в 1С:Предприятии — само по себе опасно. И что же произойдёт при проверке на ссылочную целостность в таком варианте? На самом деле, движения могут остаться если в конфигурации документа автоматическое удаление движений отключено. Этим пользуются разве что «Корректировка записей регистров»..

    Reply
  12. Fuego

    (19) я совсем никак не собираюсь тестировать. Я заблаговременно себя уберёг от подобных эксцессов. Ярый полемик ты, Фиксин.

    Reply
  13. Fuego

    (22) При чём тут «теоретические познания»? В жизни разное бывает — бесспорно. Я даже целые базы за несколько лет терял. Но я никак не смог воспроизвести ситуацию, когда документа не существует, а движения есть! И при чём тут «кризисные ситуации»? Меня вообще мало волнуют всякие «ситуации». Кризис — это когда голову занять нечем… У меня всю жизнь ваш кризис был — мне пофиг. И хлеба не ел месяцами, и плакал, когда братьям и сёстрам голодно было, а мать одна воспитывала нас пятерых. И грузчиком работал. И программировал вечерами на синклере. На Z80, который даром не прошёл в моей жизни. Я по специализации электронщик. И программирование начал не за клавиатурой PC, а с изучения дискретных составляющих цифровой электроники. Это элементы И, ИЛИ, НЕ.. Триггеры, регистры, счетчики. Специалист на широкую ногу. Так что — о кризисе где-нибудь там — подальше. Не надо мне настроение портить тут.

    Reply
  14. larisab

    (0) На вид хорошо, функционально, но при проведении сметается ручное изменение, а чем плохо стандартное решение галочка — «ручная корректировка» в просмотре движений документа в 8.1?

    Reply
  15. Fuego

    (26) в типовых конфигурациях есть такая галочка.

    (24) а если у меня не типовая конфигурация? У меня несколько баз — переделки из конфигураций лохматых годов.

    Reply
  16. Fuego

    (24) Пардон — только заметил, что не ответил. При проведении ручная корректировка «сметается» — это так. Но данная обработка не предназначена для того, чтобы править ручками документ, а потом перепроводить его. Была у нас как-то ситуация, когда кто-то изменил курс валюты в регистре сведений, а потом после полного обновления курсов перепровели документы (совершенно «случайно»). Так вот тут я не гадал, какой курс был. Я просто движения подкорректировал и всё.

    Reply
  17. Fuego

    И вообще: Всем, кто ещё увидит это — можно не комментировать мои обработки. Разве что есть вопросы типа «как использовать». Зачем вокруг какой-то мелочи раздувать дискуссии?..

    Reply
  18. larisab

    (26) в БП для Казахстана, появилась в последних версиях, я думала это и росс.есть, тогда — пардон (29).

    Reply
  19. Fuego

    (30) и в росс. есть.. Всё отличие казахстанской версии от российской — это правила учёта, различия в терминах, аббревиатурах. К примеру, в Казахстане налоговые расчеты ведутся не по ИНН, но за то каждый гражданин Казахстана имеет РНН, без которого совсем никуда.

    Reply
  20. larisab

    (31) да уж знаю, в Алмате живу, но отличий гораздо больше, чем здесь перечисленно, у нас с вами подсистема НДС отличается, не говоря уже о планах счетов и всей остальной налоговой подсистемы. Сдавала специалиста я на российской 8, но когда это было… Сейчас не имею российской последней, поэтому сравнить не могу, отсюда неуверенность:-)))

    Reply
  21. Fuego

    (32) ну отличий больше — безусловно ) Откуда мне знать. Я в Казахстане не работал программером 1С ) Да и вроде бы что в Алматы, что в Караганды, что в Астане или Павлодаре — учёт одинаков ведь.. Я знаю одно (сам видел) — в Казахстане до последнего пытаются высидеть на 7.7. А то ещё и на 7.5.

    Reply
  22. larisab

    (33) Может быть, у меня нет статистики, есть и то и другое, сейчас в связи с кризисом, многие отказываются от перехода.

    Я думаю это проблема не только Казахстана, и не последнюю роль сыграли программисты, отговаривая клиентов от перехода по причине ее «сырости».

    Reply
  23. Fuego

    (34) согласен. Да и программистов зачастую можно тоже взять в кавычки… Ошибок нет только в той программе, которой не пользуются. © Некто

    Reply
  24. larisab

    (35) Я бы не стала брать в кавычки, довольно силные прогеры в 77, а в 8 еще учится надо, продавать тоже — профессионалы сдавать и т.д., а деньги и так идут, так зачем им 8-ра. Если интереса нет, то будут садится в уходящий поезд. Да и клиенты, «вот ты опять со своей восьмерой, да купим мы купим, но позже. Пока и так все работает». Стимул -только быть прогрессивными, больше никакого. Пока поддержка идет, будут сидеть.

    Reply
  25. wwind

    Обработка хорошая. Спасибо за старт. Дальше буду дописывать. Недостатки:

    * нет возможности добавлять записи

    * нет возможности редактировать наборы записей, по которым документ движения не осуществил, но может осуществлять.

    Reply
  26. wwind

    Также к недостаткам можно отнести модальное редактирование регистров.

    Reply

Leave a Comment

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