Свод начислений для ЗУП 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='\

20 Comments

  1. Дайра

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

    Reply
  2. Улыбайка

    Странно, там в Структуре отчета прописано, что Месяца начисления разносится по колонкам. Вы не меняли настройки отчета? Напишите свай e-mail, я скину вам скрин настройки Структуры отчета

    Reply
  3. nord

    В отчете учитываются кадровые перемещения сотрудника с одной должности на другую в течении одного месяца? Т.е. если сотрудник 15-го числа перешел из Специалистов в Руководители, в своде разобьется сумма начислений или вся сумма попадет на Руководителя?

    Reply
  4. Улыбайка

    (3) nord, проверила, вся сумма попадает на руководителя, попробую поправить по возможности, сейчас загружена очень. По результатам отпишу.

    Reply
  5. nord

    (4) Спасибо. Будем ждать.

    Reply
  6. tonimontana05

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

    Reply
  7. bossansan

    При открытии отчета загружается стандартный отчет «Свод», верните деньги!!!!

    Reply
  8. Улыбайка

    (6) tonimontana05, извиняюсь, «отстала от жизни» еще актуально? Прислать настройку структуры?

    Reply
  9. Улыбайка

    (7) bossansan, отчет не бьет данные по категориям сотрудников? Может быть Вы не включили настройку? Вам выслать скрин настройки структуры отчета?

    Reply
  10. Улыбайка

    (7) bossansan, Откройте внешнюю обработку, нажмите «Список вариантов отчета», там должна быть Настройка «Свод начислений по категориям», если ее вдруг не окажется, давайте вышлю Вам на почту скриншот настройки структуры, расскажу как ее применить.

    Reply
  11. bossansan

    tonimontana05 (файл скачал) 09.12.2015 10:59

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

    1. Дайра (файл скачал) 12.07.2015 20:00

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

    Я думаю в этом проблема. Т.к. при открытии внешней обработки сама форма отличается от вашего скриншота.

    Reply
  12. bossansan

    скрин после открытия внешней обработки

    Reply
  13. Улыбайка

    (12) bossansan, нужно разобраться почему он тянет данные только из типового отчета, пока убрала из публикации внешний отчет, раз с ним иногда возникаю проблемы (проверила на 3х разных базах ЗУПа, действительно, в одной — отчет открывается только типовой, необходимо настраивать структуру руками, либо загружать ее из файла).

    Жду от Вас эл адрес, скину файл настройки структуры, загрузите через Справочник «Сохраненные настройки» — после чего в типовой отчет добавится данная настройка.

    Reply
  14. Olga_Peymer

    Добрый день, Татьяна! Пожалуйста сбросьте мне на olga_peymer@mail.ru файл настройки структуры, потому, что у меня открывается только типовой отчет

    Reply
  15. German_Tagil

    вопрос — а в разрезе статей затрат свод может быть делали?

    Reply
  16. Улыбайка

    (16) я давно не работала в этой конфигурации, настройка старая, новых не делала, не было необходимости.

    Reply
  17. German_Tagil

    жаль — в раздумьях что делать …

    Reply
  18. German_Tagil

    Спасибо за настройку — двинула она меня чуть дальше по пути ваяния ….

    Reply
  19. Улыбайка

    (19) Пожалуйста, только мне кажется из типового Свода не получится у вас вытащить статьи затрат .. придется «склеить» в СКД … насколько я помню в ЗУПе статьи затрат только в документе Отражения есть, ну и в справочнике Способов отражения …

    Reply
  20. German_Tagil

    дорабоТАЛ расчетные ведомости организаций добавив БУОсновныеНачисления и БУДополнительныеначисления

    отработаннное время, статьи затрат, количество работников

    НО ЕСТЬ СВОИ ЗАМОРОЧКИ

    Reply

Leave a Comment

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