Вкладной лист к алиментному делу (для ЗУП 2.5)




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

33 Comments

  1. PSF_Terr

    Нормально, только количество знаков в строке «Итого» очень мало

    Reply
  2. director04

    (1) Ну можно добавить, код открыт….

    PS: а вы в России работаете? 😀

    Reply
  3. Olyunchik

    За этот год нормально показала, а если берешь период с 01.01.08 по 31.08.09, то и начисленные и удержанные суммы равны 99 999,99 руб. 😮 Так и не поняла почему… а так +…

    Reply
  4. director04

    (3) проверю…. Может просто разрядности не хватило? Попробуйте за один год…

    Reply
  5. PSF_Terr

    Конечно в России, только далеко на СЕВЕРЕ 8)

    Reply
  6. director04

    (5) Ближе к народу надо жить, дружище ….. ))))) Ладно, займусь на досуге, не долго.

    Reply
  7. Bolik13

    (1), (3) Разрядности не хватает — добавить самим делов на минуту.

    Reply
  8. Гена

    Внешний отчет не может быть прочитан текущей версией программы

    2.5.39.1

    Reply
  9. director04

    (8) Запустите 1С в режие конфигуратора, и сконвертируйте отчет под 8.2

    Reply
  10. popkovsf65

    Косяк

    Reply
  11. director04

    (10) popkovsf65, Конфигурация? Релиз?

    Reply
  12. director04

    (10) popkovsf65, Зарплата и Управление Персоналом, редакция 2.5 (2.5.48.1) работает прекрасно. Озвучте способ воспроизведения

    Reply
  13. popkovsf65

    1С:Предприятие 8.2 (8.2.15.301)

    Зарплата и Управление Персоналом, редакция 2.5 (2.5.49.1) (http://v8.1c.ru/hrm/)

    Copyright (С) ООО «1C», 2007-2011. Все права защищены

    (http://www.1c.ru)

    Reply
  14. popkovsf65

    Что значит — «Озвучте способ воспроизведения»

    Reply
  15. director04

    (13) popkovsf65, редакция 2.5 (2.5.49.1) вышла только вчера, посмотрю, поправлю… Для этого совсем не обязательно было злобствовать с минусами в оценках. Разработка, в конце-концов даже не платная.

    Гораздо позитивнее подсказать об ошибке в новом релизе.

    Reply
  16. popkovsf65

    Извиняюсь за минус. Попробую поставить плюс, если система разрешит.

    Reply
  17. popkovsf65

    Готово, плюс установлен!

    Reply
  18. Ката174

    Где файл?

    Reply
  19. director04

    (18) Ката174,

    Где файл?

    Там же где всегда 🙂 http://infostart.ru/public/22421/files/

    Reply
  20. Ката174

    А зачем делать ссылку на файл 8.2, если его нет?

    Скачала 8.1, сконвертировала. Ошибка:

    {(100, 2)}: Индексируемые поля должны присутствовать в списке выборки

    <<?>>ВТ_База.Организация,

    Что может быть?

    Reply
  21. director04

    (20) Ката174,

    А зачем делать ссылку на файл 8.2, если его нет?

    Спасибо, Вера, что подсказали. Изначально файл был на месте. Видимо проблемы с сайтом.

    Все поправил, можете качать.

    Reply
  22. mary_F

    (21) Благодарю за отчет, бухгалтер в восторге! Только почему-то не заполняется графа переведено почтовых расходов? За перевод денег с работника удержано 97,64 !

    Reply
  23. director04

    (22) mary_F, очень рад что вам пригодилось. Вашу проблему изучу по приезду на родину. Пока отдыхаю.

    Так что не судите строго.

    Reply
  24. M@sha

    Для ЗиК БУ подойдет (с небольшой доработкой)?

    Reply
  25. director04

    (24) M@sha, Не буду врать, не пробовал. Не работал с этой конфигурацией…

    Reply
  26. Shrek2015

    зачетно!

    Reply
  27. M@sha
    director04 25.05.13 1:32

    (24) M@sha, Не буду врать, не пробовал. Не работал с этой конфигурацией…

    Спасибо за такой ответ! Попробуем, если на последней версии ЗУПа работает, значит можно допилить и для ЗиК БУ

    Reply
  28. M@sha

    После небольшого изменения работа на Конфигурации Зарплата и кадры бюджетного уч-ия. Спасибо за основу, очень удобный и нужный отчет.

    Reply
  29. lar-sankina

    Почему-то не работает, при формировании дает ошибку:{Форма.ФормаНастройки.Форма(169)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок)Построитель.Параметры.Вставить(«парамИзмеренияБазового» , ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(«ФизЛицо,Организация»));

    Что-то не так?

    Reply
  30. Ariko-sv

    Не работает!!!!!!!!!

    {Форма.ФормаНастройки.Форма(169)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок)

    Построитель.Параметры.Вставить(«парамИзмеренияБазового» , ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(«ФизЛицо,Организация»));

    Очень нужен такой!

    Reply
  31. belmaxim

    Та же ошибка, что и у всех:

    {Форма.ФормаНастройки.Форма(169)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок)

    Построитель.Параметры.Вставить(«парамИзмеренияБазового» , ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(«ФизЛицо,Организация»));

    Разработчики поменяли название общего модуля ОбщегоНазначения на ОбщегоНазначенияЗК

    Если поменять вручную в обработке, все работает.

    Reply
  32. merlin1975

    Здравия!

    Не могли бы Вы внести в обработку изменения, в части «неиспользования фильтра» по Физлицу, т.е. выбор организации и автопоиск нужных физлиц, вывод их в таблицу, там выборочная пометка и тогда уже формирование вкладыша?

    Благодарю.

    Reply
  33. director04

    (32) К сожалению, я сейчас не имею возможности уделить время данному проекту. Все коды открыты, попросите об этом фирму, которая выполняет ваше сопровождение. Спасибо за понимание.

    Reply

Leave a Comment

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