Выплаты зарплаты. Проблемы в программе "1C:Зарплата и Кадры".




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

10 Comments

  1. WiseSnake

    Понятно что это рекламная статья…

    Только вот очень спорная. А на практике, лично у моих клиентов, уже не возникает описанных проблем, при условии правильного порядка действий (правильного использования ЗиК).

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

    Вот только возможно стоит использовать Инфостарт не только как рекламную площадку, но и продавать свои разработки через сайт, тем самым помогая ему?

    Reply
  2. bb1962

    (1) А у моих клиентов при наличии квалифицированной поддержки такие ошибки встречаются всегда, сколько не объясняй, до тех пор пока не начнут

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

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

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

    Что касается продаж на инфостарте, свои разработки с нуля я пытаюсь здесь продавать, н-р http://infostart.ru/projects/4669/, но в данном случае это доработки, т.е. заимствованный код. Как их продавать без разрешения фирмы «1С», инкогнито? А поддержка разработок? К сожалению, публика на инфостарте весьма специфическая и интересуют ее больше игрушки чем серьезные разработки, или халява.

    Reply
  3. WiseSnake

    (2) Судя по вопросам в http://infostart.ru/projects/2059/?p=2#comm29 (я там ответил) позволю себе усомнится в том, что вы правильно ведете учет.

    > в порядке вещей — перерасчет задним числом, например премия за прошлый период уже после выплаты или что еще хуже исправление в сторону уменьшения зарплаты. Вот Вам и переплата, которую нигде невозможно увидеть.

    У меня не возникает таких проблем… хотя есть и выплаты задним числом и исправления в меньшую сторону… Что бы это значило ? )))))

    Reply
  4. WiseSnake

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

    Я бы на Вашем месте не разбрасывался тут такими громкими словами о халяве. У самого то у вас рыльце не в пушку??? Я вот вижу что Вы скачали ВСЕ мои разработки по зарплате. Но даже не поставили ни одного плюса ни сделали ни одного комментария по делу (или хотя бы сказали спасибо)… неужели ничего не понравилось, неужели ничего не используете? Или качали ВПРОК??? Халява же ))))

    Reply
  5. artbear

    В статье довольно хорошо расписан механизм ошибок при выплате зарплаты в ЗиК. Плюсанул.

    Почему 1С до сих пор не решила подобную задачу, совершенно непонятно, ведь она существует с первых версих ЗиК 2.Х, еще до появления ЗиУП 🙁

    Способов решения также существует несколько, в т.ч. и бесплатных 🙂

    Reply
  6. bb1962

    Вот здесь кое-что о способах решения http://infostart.ru/projects/5859/ с

    некоторыми комментариями. Оригинал, по моим впечатлениям, не обновлялся и

    даже не тестировался. Это к вопросу о бесплатности. Вообще, бесплатных

    разработок не бывает, кто-то за них все равно заплатил.

    Reply
  7. lanuser

    Статья хорошая, поставил бы +, но жадность на избитую тему, это -.

    Кому надо — есть внешняя обработка, от Mike, аж 2002 года!

    http://1c.proclub.ru/modules/mydownloads/personal.php?cid=89&lid=1420

    Не поленитесь только ПромДата с 2002 года на нужный переставить в модуле 😎 И поставьте оценку Mike! Хотел бы я, чтоб все мои отчеты по 8 лет работали 😀

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

    Reply
  8. bb1962

    (7) >лучше док выплаты переписывать

    http://infostart.ru/public/58094/

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

    таких разработок оплатить.

    Reply
  9. марокко

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

    Reply
  10. wildskiff

    Статья отличная! Теперь наши бухи прозрели откуда такой долг за предприятием по некоторым сотрудникам ) Спасибо Вам большое!

    Reply

Leave a Comment

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