Диагностика УПП при закрытии месяца




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

45 Comments

  1. anig99

    Потестируем (:

    Но вот расчет ставок НДС можно производить, а не тупо константу 18 забивать.

    Reply
  2. lunallena

    очень полезно, спасибо

    Reply
  3. Рамзес

    Закладка «Производство» — «Продукция списывается на затраты подразделения …». Выдает ошибку: «Поле не найдено «ДокументОснование»

    Reply
  4. gsp5

    Спасибо.Очень удобно

    Reply
  5. Обработка неплохая. Предложили бухгалтерам. Пользуются периодически

    Reply
  6. proger1c81

    Моим пользователям очень пригодится. До этого они руками все проверки делали, может не стоит им показывать автоматическую диагностику, а использовать самому для их контроля?!

    Reply
  7. Kutuzov

    (6) proger1c81, наша задача — нести разумное, доброе, вечное, а ты — «не показывать»))

    Reply
  8. Kutuzov

    (3) Рамзес, спасибо за замечание, исправил.

    Reply
  9. proger1c81

    (7) обработка полезна продвинутым пользователям. А непродвинутые вообще думать не хотят, хотят только, чтобы за них программа всё делала. На досуге думают не о работе, а думают, что у них не автоматизировано и что ДОЛЖЕН им программист

    Reply
  10. hooligan_slx

    А она тестирует базу до закрытия месяца или после????

    Reply
  11. hooligan_slx

    буду тестировать, посмотрим что из этого получится, месяц первый раз закрывать буду…

    Reply
  12. ageres

    По авансам сам думал написать подобную проверку, как раз подвернулась данная обработка. Из замечаний пока: не сохраняются отборы в анализах и в запросах не используются РАЗРЕШЕННЫЕ.

    Reply
  13. Kutuzov

    (13) ageres, спс за конструктивное замечание, поправим

    Reply
  14. irapronira

    Подскажите, а подойдет для КА?

    Reply
  15. Kutuzov

    (15) irapronira, Вообще я на КА не тестировал, но думаю некоторые из отчетов (не все) подойдут — проверьте, отпишитесь)

    Reply
  16. afavor

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

    Reply
  17. SergeyD

    В отчете «Закрытие авансов по покупателям(в разрезе контрагентов)» сбивается отбор. Выводит только колонку с контрагентами, а самые интересности опускает. По идее отчет должен выглядеть также как и «Закрытие авансов по покупателям(в разрезе договоров)» только без разреза договоров.

    Reply
  18. SergeyD

    Не хватает заголовка в форме отчета — какой именно отрыт сейчас. Такое изобилие, не трудно заблудиться. Спасибо за работу.

    Reply
  19. SergeyD

    В отчете «Проверка начисления НДС с авансов полученных» период отчета никакой роли не играет. Конфигурация 1.3.11.

    Reply
  20. Kutuzov

    (21) SergeyD, спасибо за конструктивные замечания, поправим! Если еще что обнаружится — пиши)

    Reply
  21. alekseineputin

    Интересно бы посмотреть ))) Жаль смарт-денежек не хватает.

    В любом случае, комментарий-то в моем файле останется,

    найду потом этот отчетец

    Reply
  22. Kutuzov

    (23) mamanelli, дык это, на сайт на мой перейдите, там есть. Если понравится — с вас плюсик)

    Reply
  23. Svetlana_K

    Отличная обработка!!! Нужна для проверки пользователям, что бы сами себя еще проверили. Для их спокойствия!!! Спасибо.

    Reply
  24. firevii

    На 8.1 будет работать?

    Reply
  25. Kutuzov

    (26) firevii, версия под платформу 8.2. Но если есть необходимость — переделывайте под 8.1. Код останется тем же самым.

    Reply
  26. AlX0id

    а РАУЗ проверяет? )

    Я бы взял, если б проверяла.. Иначе придется самому писать..

    Reply
  27. Kutuzov

    (28) AlX0id, РАУЗ не проверяет) можем скооперироваться, кстати, для РАУЗа сделать, я тогда в общую тоже добавлю

    Reply
  28. nanik

    Спасибо за разработку, думаю в будущем очень будет нужна, после перевода БУ на 1с 8 в конфигурацию на базе УПП.

    Reply
  29. pushinka

    пригодилась! Спасибо огромное! Очень удобно!

    Reply
  30. margo2007

    Вроде что-то показывает, а ошибок в этом документе не вижу

    Reply
  31. higs

    Очередной тестировщик — почти все пригодилось и показывает правду, пока замечаний не выявлено. УПП 1.3

    Reply
  32. Alex1Cnic

    Респект за разработку…также в УПП 1.3 крутится.

    Reply
  33. sumixam

    Скачал обработку буду тестировать результат напишу. Автору спасибо за труды.

    Reply
  34. dimaster

    (36) sumixam, какие результаты тестов?

    Reply
  35. sumixam

    В общем посмотрел отчет, дал бухам потестировать, но у нас для проверки сделан свой, этот бухов не утроил. Мне в приципе все понравилось, оставил, может и пригодится.

    Reply
  36. Uejova

    Спасибо! Очень удобная вещь!

    Reply
  37. Yha

    Огромное спасибо. Очень удобная обработка. Даже когда УПП пишет что в бух. учете все супер, она находит минусы, которые при большой номенклатуре в жизни «с кандачка» не найти

    Reply
  38. Светлый ум

    (11) Сам разобрался и другим напиши)

    Reply
  39. Светлый ум

    irapronira, для КА 1.1 все процедуры отрабатывают?

    Reply
  40. Salty

    Что-то какой-то бред у меня выдает данная обработка. Например, проверка документов с выделенным НДС без с/ф, выдает документы, где с/ф есть и проведена.

    Проверки по партионному учету тоже врут, в частности по отрицательным остаткам на складах.

    Может стоит расшифровку нормальную сделать, чтобы хоть показывала обработка, где она такое увидела?

    Партии должны выводиться как минимум в разрезе организаций, иначе это филькина грамота.

    Документы, которые обработка в партионном учете выдала, якобы неправильные, вообще по БУ не проходят.

    Но название красивое — Диагностика УПП 🙂

    Reply
  41. Kutuzov

    (43) Salty, если честно, на последних релизах обработка не тестировалась, может в этом дело? Если что, можем помочь с проверками, стучитесь в личку.

    Reply
  42. German_Tagil

    irapronira, для КА 1.1 все процедуры отрабатывают?

    Reply
  43. Alex_CheST

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

    Reply
  44. Alex_CheST

    А автор не будет выкладывать руководство к обработке? Ну или пример ее использования? Что в каком порядке проверять. Как именно ? Или эта обработка только для программистов которые полезут в СКД и по запросу будут разбираться?

    Reply
  45. Kutuzov

    Добрый день! Обработку в свое время делал «под себя». До уровня типового решения она, конечно, не дотягивает, но тем не менее может быть полезна. Можно еще аналоги посмотреть — возможно, есть более «продвинутые».

    Reply

Leave a Comment

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