Управление увольнениями. ЗУП 8.1




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

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

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

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

26 Comments

  1. RailMen

    Арчибальд ау…

    Reply
  2. Alex_will

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

    Reply
  3. Арчибальд

    (1) УА!!!

    Аватарка понравилась :))

    Но в следующий дайджест все равно не включу. Это было бы профанацией при моем уровне восьмерочной компетенции (~0)

    Reply
  4. RailMen

    А что не так с компетенцией???

    Reply
  5. Свой

    Если всех уволить, зачем тогда 1С ЗУП ? тогда уж и модуль по самоудалению базы доделайте :))

    Reply
  6. I_G_O_R

    на скриншоте выглядит качественно

    Reply
  7. RailMen

    Ребятки давайте я вам кое что поведаю. В наше кризисное время многие собственники чтобы спасти бизнес закрывают ооо1 увольняя из него сотрудников и тут же открывают ооо2 принимая в него этих же сотрудников. Так что не так все плохо.

    Reply
  8. Арчибальд

    (4) Ламер я в 8-ке. Вот за 3 дня удалось написать на 8.1 две обработочки, на которые в семерке мне по часу бы хватило вместе с дизайном…

    Reply
  9. RailMen

    Сегодня с утра пришла в голову идея авто заполнения тч пенсионерами. Т.е. сделать еще 2 отбора по возрасту и полу.

    Reply
  10. RailMen

    Арчибальд мы верим в тебя. Чтобы дать рецензию на 81 работу твоих знаний достаточно. Некоторые руководители проектов РП вобще не програмисты, однако проекты могут вести вполне успешно. Так что дерзай!

    Reply
  11. Арчибальд

    (10) Спасибо за доверие. Мне бы еще парочку доп. часов в сутках… :))

    Reply
  12. Одинец

    Маг Иван — отвяжи обработку от глобальных модулей, а то: «{Форма.Форма(22)}: Метод объекта не обнаружен (ЗаполнитьШапкуДокумента)

    ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект, глЗначениеПеременной(«глТекущийПользователь»));», твоя обработка не будет работать в следующем релизе…

    Reply
  13. ykna@rambler.ru

    Спасибо за программу. Она действительно актуальна.

    Reply
  14. igor_gk

    (7) Кому война, кому мать родна…

    И где это «в наше кризисное время» открывают-нанимают? От всех работников нашего предприятия большой тебе привет… Попадись только 😉

    Reply
  15. RailMen

    (16) igor_gk !

    В (7) я прозрачно намекал на одну из схем ухода от налогов, когда собственник объявляет ООО банкротом и в конечном итоге закрывает его, спасая тем самым бизнес. При этом сотрудники увольняются формально, продолжая работать и получать ЗП, но уже в другом ООО.

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

    Reply
  16. igor_gk

    (17)

    Да ладно, шутим мы… 😉

    Сам же скриншот какой выложил? Вот и у меня юмор 😉

    Reply
  17. Boroda

    (5) Обработка нужная. И кризис тут ни причём. У меня, например, в паре организаций есть сезонные работники. Так по окончании сезона их и увольняют «пачкой». Так что, посмотрю, думаю, пригодится.

    Reply
  18. vinnipyx

    Люди помогите, у меня при нажатии в обработке на «Подбор» выдает ошибку «{Обработка.УправлениеУвольнениями_НИИАС.Форма.Форма(52)}: Метод объекта не обнаружен (ОткрытьФормуВыбораСотрудникаОрганизации)

    ПроцедурыУправленияПерсоналом.ОткрытьФормуВыбораСотрудникаОрганизации(ЭлементыФормы.СотрудникиКУвольнению, ЭтаФорма, Ложь, ДатаУвольнения, Организация, 1);». Кто знает в чем причина, помогите, очень прошу.Использую конфигурацию «Зарплата и управление персоналом 2.5»

    Reply
  19. RailMen

    Итак, наконец, я выложил обновление для релиза 2.5.20. Много нового. Оч устал писать нет сил. Смотрите сами. 😉

    Reply
  20. СергейКа

    Релиз 2.5.20.3. Демо база

    При открытии обработки ошибка:

    {Форма.Форма(799,13)}: Переменная не определена (Упр)

    <<?>>Упр.РассчитатьДокументСреднегоЗаработкаУпр(РасчетныйДокумент,Ложь);

    Кстати:

    MagIvan 19.03.2010 01:19

    Итак, наконец, я выложил обновление для релиза 2.5.20. Много нового.

    И при этом в комментарии обработки:

    Пантелеев Иван 25 авг 2009. Изменения под релиз 2.5.20 16.02.2010

    😀

    И модуль забыл закрыть под пароль 🙂

    Над комментариями в инициализации переменных модуля поржал, спасибо 😀 😀 😀

    Reply
  21. vinnipyx

    Такая же проблема, {Обработка.УправлениеУвольнениями_НИИАС.Форма.Форма(799,13)}: Переменная не определена (Упр) <<?>>Упр.РассчитатьДокументСреднегоЗаработкаУпр(РасчетныйДокумент,Ложь);

    Reply
  22. RailMen

    (22) Эх, ну и непонятливый ты СергейКа ! 😀

    Основной заказчик — это не сайт Инфострат, т.к. денег сайт мне никогда не приносил. Для клиента обработка была переписана более месяца назад. А для массового зрителя — выложена только сейчас. Модуль Упр — это тож мое творчество ))) — исправлю.

    Что касается пароля — то его я намерено не поставил (для справки: последние релизы платформы 8.1 не позволяют ставить пароль на код, содержащий директивы препроцессора), что бы такие как ты могли полюбопытствовать что в модуле твориться. Кстати так и не понял где смеятся: переменные были названы не для хохмы, а так чтобы через год код открыть и было все понятно.

    Reply
  23. RailMen

    Не могу выложить новую версию обработки. Сайт тормозит и трещит по швам. Рыыыы

    Reply
  24. RailMen

    Версия 4.1. Вечер 20 марта 2010г. Тестируем на типовых!

    Reply
  25. СергейКа

    (24)

    Основной заказчик — это не сайт Инфострат, т.к. денег сайт мне никогда не приносил. Для клиента обработка была переписана более месяца назад. А для массового зрителя — выложена только сейчас.

    Понятно. Но всё же… Я называю это «артефакты» т.е. куски кода, комментариев, описания и т.п. оставшиеся от предыдущих версий. Чистка/корректировка всего этого — это первый этап перед публикацией или отдачей заказчику после проверки работоспособности в целом. Естественно косяки бывают, но не в таком же количестве 🙂

    Что касается пароля — то его я намерено не поставил (для справки: последние релизы платформы 8.1 не позволяют ставить пароль на код, содержащий директивы препроцессора)

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

    что бы такие как ты могли полюбопытствовать что в модуле твориться

    😀

    Вот спасибо то, и обо мне позаботились 😀 Ну как же не заглянуть в модуль, если:

    а) частично перекрывается функционал моей обработки сделанной на полгода пораньше http://infostart.ru/public/19740/;

    б) выдает ошибки сразу при открытии;

    в) в комментариях описано что обработка зачем-то лезет в реестр.

    Ко всему в совокупности ❓

    И кстати, не надо обо мне так беспокоиться 🙂 При необходимости могу посмотреть модуль даже если он закрыт паролем или как-нибудь еще.

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

    Не переменными, комментариями. Хотя и наличие некоторых переменных, которые не несут ни смысловой, ни функциональной нагрузки — «артефакты».

    Reply
  26. RailMen

    (27) Может у меня параноя, но мне кажется, что очень много программистов зовут <Сергей>. Они повсюду 😮 Да же сейчас 2 шт на расстоянии 2.5 м.

    Поправь ссылку свою на работу с «перекрываемым функционалом»

    Reply

Leave a Comment

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