Справка о заработной плате для ЗУП




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

28 Comments

  1. Olyunchik

    +… Только «в течении» — пишется с окончанием «е»…

    Reply
  2. sergo777

    Очень даже !

    Reply
  3. dmalyshev

    Полезная штука. Спасибо!

    Reply
  4. nina1958

    Почему? Если вводится период декабрь 2008 по март 2009, то среднемесячная почему-то рассчитывается отрицательная. Если не можете смоделировать согласно выслать пример.

    Во всем остальном хороша!!! Спасибо!

    Reply
  5. cimon_lk

    Задача «Справка о среднем заработке» не работает в версии ЗиУПа 2.5.17.8 — требуется дата начала отчёта.

    Помогите.

    Reply
  6. tomvlad

    (5) Проверил на 2.5.17.8 — замечательно работает

    Reply
  7. director04

    (5) Просматривается интересная закономерность: «….

    cimon_lk 23.10.2009 18:38:25

    Задача «Справка о среднем заработке» не работает в версии ЗиУПа 2.5.17.8 — требуется дата начала отчёта.

    Помогите.»; — это из другой ветки по альтернативному отчету.

    Может конфигурация правленная?

    Reply
  8. LarisaFo7

    Все хорошо, но нельзя ли добавить еще 9% с дивидендов сотрудников.

    Reply
  9. LarisaFo7

    это к расшифровки по НДФЛ

    Reply
  10. Thalt

    Для 2.5.21.3:

    Строка 231 модуля формы Настройки:

    УниверсальныеМеханизмы.Просклонять(КомпонентаСклоненияФИО, ФИОСотрудника, 3, ФИОСотрудника);   

    заменить на

    УниверсальныеМеханизмы.Просклонять(КомпонентаСклоненияФИО, ФИОСотрудника, 3,, ФИОСотрудника);   

    Не рассчитывается и не заполняется колонка 3 — ПрофВзносы.

    Reply
  11. tcvil

    Спасибо, обработка очень нужная.

    Reply
  12. kouch

    Разработчику респект!

    Reply
  13. ukgh

    Спасибо, обработка очень нужная.

    Разработчику респект!

    Reply
  14. jennya

    Спасибо за обработку, пользуемся, вспоинаем вас добрым словом

    Reply
  15. Mitusinka

    СУПЕр, очень полезная справка

    Reply
  16. Konstatine

    Подскажите, запуститься ли данная обработка в 8.2? Конфигурация ЗУП.

    Reply
  17. tomvlad

    (17) Конечно запустится. Только предварительно нужно открыть ее в конфигураторе для конвертации.

    Reply
  18. MikleVV

    Спасибо, хорошо работает.

    Reply
  19. AlenaR

    Под 2.5.46.1 пришлось немного допилить по компоненты склонения

    Правда почему-то, если в период выборки попадает 2 года, то есть например с декабря 2011 по февраль 2012, среднее считается правильно, но в таблицу попадает с минусом

    Reply
  20. sergio199

    Зачетно!!!

    Reply
  21. Cemen82

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

    Reply
  22. ozzi_tmb

    Хорошая обработка.. только немного пришлось подпилить под нашу конфигурацию.

    Reply
  23. diolkost

    Не открывается обработка: {ВнешнийОтчет.СправкаОЗаработнойПлате.Форма.ФормаНастройки.Форма(231)}: Недостаточно фактических параметров

    УниверсальныеМеханизмы.Просклонять(КомпонентаСклоненияФИО, ФИОСотрудника, 3, ФИОСотрудника);

    Reply
  24. tomvlad

    (24) Добрый день, Ольга. Этот отчет разрабатывался под 1С:ЗУП 2.5 9 лет назад. Функция Просклонять() общего модуля УниверсальныеМеханизмы за это время изменилась — был добавлен еще один параметр — Результат. Вам нужно изменить вызов этого модуля (или поручите это сделать сопровождающего Вашу организацию программиста).

    Reply
  25. diolkost

    Некому мне поправить :((, сама не умею

    Reply
  26. tomvlad

    (26) Скачайте новую версию отчета. В нем исправлен вызов этой функции и формирование суммы прописью.

    Reply
  27. diolkost

    Где ее взять?

    Reply
  28. tomvlad

Leave a Comment

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