Отчет "Отражение зарплаты в регламентированном учете" для УПП 1.3




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

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

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

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

23 Comments

  1. alexsiswx

    Так. Ща попробуем! Если работает без глюков не заменима будет.

    Reply
  2. revril

    ооочень крутая вещь)))бухи довольны)))а я то как)))спасибо автору))

    Reply
  3. revril

    плюс один

    Reply
  4. ekean

    круто..

    Reply
  5. Massimo

    очень полезный отчет, как раз мучаюсь с проводками,. спасибо

    Reply
  6. andreylitvinov

    Странно почему такой отчет так и не сделают в УПП.

    Все кто переходит сс ЗУП на УПП просят такой отчет.

    Правда при выходе обновлений приходиться иногда его корректировать а так все говорят спасибо так как считают именно он дает необходимую прозрачность.

    Reply
  7. ab_initio

    (6)

    Приятно, Андрей Николаевич, получить лестный отзыв от земляка 🙂 Плюсик, пж-ста, не забудьте поставить 🙂

    Reply
  8. capshow

    Тоже столкнулся с отсутствием подобного отчета в УПП (сначала долго искал его в конфигурации), но так и не понял логику разработчиков. Ведь отчет позволяет увидеть разбивку затрат по видам начислений, а для компаний с международной отчетностью это, например, важно

    Reply
  9. mariyanna

    Только собралась сама его делать.. Спасибо огромное автору!!! Очень нужный отчет!!

    Reply
  10. zav-777

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

    Reply
  11. владимирп

    Очень занимательный отчет, спасибо автору!!!

    Reply
  12. clab

    помогло

    Reply
  13. nanik

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

    Reply
  14. doom2good

    УПП 1.3.36.1 — полёт нормальный. Спасибо.

    Reply
  15. doom2good

    ПСЫ: не люблю я закомменченый код….

    Reply
  16. el7

    спасибо за отчет)))

    Reply
  17. ab_initio

    Даже не ожидал такой популярности. Рад, что отчет оказался полезным!

    Reply
  18. el7

    еще раз большое спасибо))) сейчас все пляшут)))

    Reply
  19. platinum

    (17) что же вы не ожидали?)Вполне ожидаемо. Я офигел сначала,что такого отчета нет в УПП, типа на хрена такую игрушку дорогую купили, а там нет даже основных отчетов и отборов, которые есть в других гораздо более дешевых программах. Спасибо вам за отчет,хоть не пришлось самому его клепать.

    Reply
  20. avk2009

    Василий, спасибо огромное за отчет. После перехода на УПП и расчет зарплаты не в Зик пользователи высказывали недовольство пока не получили инструмент, заменяющий свод проводок из Зик.

    Reply
  21. gga

    Очень нужный отчет, не пришлось самой делать — время съэкономлено, спасибо

    Reply
  22. Nata

    Спасибо. Хороший отчет

    Reply
  23. alo2012

    Спасибо за отчет, пригодился.

    Reply

Leave a Comment

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