Печать приказа на предоставление отпуска по беременности и родам, ЗУП(2.5.42.4)




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

48 Comments

  1. imagoman

    может номер строки табличной части лишний? и печатать для текущей выделенной строки по умолчанию стоит?

    Reply
  2. kuz.mina
    и печатать для текущей выделенной строки по умолчанию стоит?

    я не ставила 😀 мне проще нашим кадрам объяснить, как пользоваться дополнительным полем в форме, чем отвечать на постоянные звонки: «Я тут нажала, а у меня не то появилось»

    Reply
  3. e.kogan

    Хорошо бы по умолчанию сделать всё-таки печать всех строк, имеющих нужный вид неявки. Или регулировать доп.свойством.

    Кстати, как вам ЗУП на 8.2? Косяков много? Пользователи спокойно воспринимают?

    Reply
  4. kuz.mina

    (4) позже попробую сделать, пока не до этого….

    косяки конечно есть, как же без них… пользователи до сих пор в шоке (зуп стоит уже 5 месяцев), особенное если учитывать, что до этого кадры работали в ворде, а зарплатники в БЭСТе. худо-бедно учимся, уже виднеется свет в конце тонеля

    Reply
  5. Молодой 1Снег

    {ВнешняяОбработка.ОтпускаПоБеременностиИРодамТ6.МодульОбъекта(129)}: Ошибка при вызове метода контекста (ПолучитьОбласть): Область не найдена: Согласовано

    ОбластьМакетаСогласовано = Макет.ПолучитьОбласть(«Согласовано»); // с кем согласовано

    по причине:

    Область не найдена: Согласовано

    Reply
  6. kuz.mina

    (6) Извиняюсь, мой косяк, блок Согласовано работал только для макетов нашей организации. Исправила, можно качать заново. Однако интересен тот факт, что обработку скачали уже 62 человека, а ошибка обнаружилась только сейчас =)

    Reply
  7. Abadonna

    (7)

    Однако интересен тот факт, что обработку скачали уже 62 человека, а ошибка обнаружилась только сейчас =)

    Да ничего удивительного. Качают «абы було», на всякий случай.

    Reply
  8. Abadonna

    +(8) Кстати, и ваши могли спокойно обойтись без оного, у вас же там не конвейер беременных? Ручки бы не отвалились в кадрах в Ворде нарисовать в кои-то веки

    Reply
  9. Молодой 1Снег

    (7) Плюсую

    Reply
  10. kuz.mina

    (8) Даже если «абы было», можно же запустить посмотреть. не понимаю я таких

    (9) как показывает практика, ручки у них отвалились раз в месяц приказ в ворде набивать… ну, как говорится, любой каприз за ваши деньги 🙂

    Reply
  11. Abadonna

    (11) Слушай, а ведь бывают и НЕ кадровые приказы…

    Как же они, бедные, их печатают? 😀

    Reply
  12. kuz.mina

    (12) наверно, таких еще небыло, ибо если бы им еще какую бумажку надо было, они бы уже давно ко мне прибежали. Забавно то, что они только с начала года начали работать в 1с, до этого ВСЕ приказы набивали в ворде

    Reply
  13. KostyaBu

    Процедура ПолучитьТекстЗапросаПоОтветственнымЛицам() переехала из модуля ФормированиеПечатныхФорм в модуль ФормированиеПечатныхФормЗК, после редактирования все работает. Автору огромная благодарность!!! 😀

    Reply
  14. Bruk

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

    Reply
  15. tanilka

    а у меня на ЗуП 2.5.40.4 вылезла ошибка

    {ВнешняяОбработка.ОтпускаПоБеременностиИРодамТ6.МодульОбъекта(34)}: Метод объекта не обнаружен (ПолучитьТекстЗапросаПоОтветственнымЛицам)

    Запрос.Текст = ФормированиеПечатныхФорм.ПолучитьТекстЗапросаПоОтветственнымЛицам(

    Не удалось сформировать внешнюю печатную форму!

    Метод объекта не обнаружен (ПолучитьТекстЗапросаПоОтветственнымЛицам)

    Reply
  16. tanilka

    Прошу прощения, прочитала комментарий (14), исправила — Все работает!!! Спасибо!

    Reply
  17. anima-07

    {ВнешняяОбработка.ОтпускаПоБеременностиИРодамТ6.МодульОбъекта(34)}: Метод объекта не обнаружен (ПолучитьТекстЗапросаПоОтветственнымЛицам)

    Запрос.Текст = ФормированиеПечатныхФорм.ПолучитьТекстЗапросаПоОтветственнымЛицам(

    Пожалуйста, поясните подробно, как можно исправить косяк, не привлекая программиста!

    Reply
  18. kuz.mina

    файл отредактирован в соответствии с релизом 2.5.42.4 ЗУП

    Reply
  19. gutentag
    В виду того, что приказ о предоставлении отпуска по беременности и родам не предусмотрен действующим законодательством, но в нашей организации используется

    Вопрос теоретическо-филосовский: если законом не предусмотрен отпуск, то нет ли в этом нарушения закона(ов)?

    Reply
  20. kuz.mina

    (20) нет, не нарушает. Организация имеет право издавать любые внутренние приказы не противоречащие законодательству

    Reply
  21. 105raz

    Я уже третий год успешно сопротивлялась написанию подобного приказа. Из подобного же — приказ на смену фамилии. Но плюсик поставила, сейчас скачаю и попробую прикрутить с ЗиКБУ.

    Reply
  22. gutentag

    (22) …ну, еще дождаться бы от Автора приказа «на разрешение получить единовременное пособие из ФСС» 🙂

    Reply
  23. kuz.mina

    (23) если попросят — и такой сделаю =) любой каприз за ваши деньги =)

    Reply
  24. sdsmax

    Отпуск по беременности и родам обычно плавно переходит в отпуск по уходу за ребенком до полутора лет и мохно было бы расширить возможности данной формы. Сами пока в Ворде набираем.

    Reply
  25. kuz.mina

    (25) Печатная форма отпуска по уходу за ребенком есть в документе Отпуск по уходу за ребенком. Зачем изобретать велосипед?

    Reply
  26. winder

    Хорошо бы добавить авторегистрацию, а также отключение ответственного и списка согласований.

    Reply
  27. Zas1402
    я не ставила smile:D мне проще нашим кадрам объяснить, как пользоваться дополнительным полем в форме, чем отвечать на постоянные звонки: «Я тут нажала, а у меня не то появилось»

    знакомая ситуация))

    Reply
  28. sv-ikon

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

    Reply
  29. рибак

    счас скачну) посмотрим.. заранее плюс

    Reply
  30. profych1

    Отлично, несколько раз уже разгорался спор по этому приказу. Нужен он или не нужен. Проблема в том, что в фонды требуют ксерокопии этих приказов. Вот и получается чехорда. Поэтоу лучше уж иметь печатную форму, да и 1С-никам давно бы пора ее внедрить в ЗиУП, а не упираться, что приказ не является основанием для отпуска по беременности и родам.

    Reply
  31. tanilka

    (31) profych1, если 1с-ники начнут внедрять в конфигурацию все что просят фонды и налоговые, но не требуется по законодательству, то мы с Вами устанем обновляться… :-)))

    Reply
  32. kuz.mina

    (32)а если не начнут, то мы устанем сами это дорабатывать

    Reply
  33. tanilka

    (33) если за нас все будут делать 1с-ники, зачем же тогда вообще мы нужны?

    Reply
  34. kuz.mina

    (34)например, чтобы исправлять их косяки =)))

    Reply
  35. tanilka

    (35) Это точно… Об этом я как то подзабыла :-)))

    Reply
  36. bahbah

    Хорошая печатная форма. Хотя вопрос с ее необходимости и спорный, автору большое спасибо за работу!!

    Reply
  37. cmd_vasec

    Спасибо, хотел сам писать. А количество дней отпуска сохраняются?

    Reply
  38. petrov_al

    Отлично у нас как раз начальник КАДРОВ потребовал печать данного приказа. Спасибо. Кстати долго ржал когда он заявил, дословно: «Внести в справочник отпусков Отпуск по беременности и родам для формирования приказа о предоставлении отпуска по беременности и родам». После этого захотелось действительного так и сделать и поставить галку предоставлять всем.

    Reply
  39. kuz.mina

    (39) может ему еще нужно график отпусков по беременности и родам?))))))))))))))

    Reply
  40. Nathaly

    Спасибо, как раз пригодилась

    Reply
  41. sergiobargio1

    Спасибо, печатная форма очень полезная.

    Подскажите, пожалуйста, как поступить:

    печатная форма привязывается к бухгалтерскому документу НачислениеПоБольничномуЛисту, а печатать этот приказ должны кадровики, которым нет доступа к этому виду документов?

    Reply
  42. kuz.mina

    Обработка крепится к документу НеявкиИБолезниОрганизации — кадровому документу.

    Reply
  43. Bacemo

    В некоторых компаниях от нечего делать только и придумывают новые формы. Так что сойдет. От меня +.

    Reply
  44. TrinitronOTV

    Большая благодарность автора за данную печатную форму, как раз понадобилась такая форма

    Reply
  45. i_pich

    Спасибо, пригодилась!

    Reply
  46. Infector

    Нашим понадобилась, в целом нормально

    Но на одну недоработку сразу могу указать: для подключения к документу «НеявкиИБолезниОрганизации» неплохо бы использовать макет «Параметры_Авторегистрации». Иногда все-таки и простые пользователи качают, а у них от действий по розыску и подключению нужного документа и ступор может быть.

    №2

    Дополняю:

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

    Reply
  47. Semak

    ЗУП 2.5 (2.5.94.1)

    {ВнешняяОбработка.ОтпускаПоБеременностиИРодамТ6.МодульОбъекта(27)}: Метод объекта не обнаружен (ГоловнаяОрганизация)

    Запрос.УстановитьПараметр(«ГоловнаяОрганизация», ОбщегоНазначения.ГоловнаяОрганизация(СсылкаНаОбъект.Организация));

    там функция «ГоловнаяОрганизация» в модуле «ОбщегоНазначенияЗК»

    Reply
  48. Infector

    То верно, но учтите, что публикация не первой свежести.

    Reply

Leave a Comment

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