Заполнение табеля сводно




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

52 Comments

  1. MatrosovYros

    При запуске обработки на ЗКГУ 3.1.2.90 Ошибка: «Значение не является значение объектного типа (Объект)».

    Разъясните в чем проблема?

    Reply
  2. MatrosovYros

    Проблема решена. Надо было подключить обработку через Администрирование.

    Reply
  3. roman.ch

    Есть же документ ввод данных для расчета заработной платы

    Reply
  4. ccserg

    (3) это что то совсем не то

    Reply
  5. roman.ch

    (4)То то, в шаблонах настраиваешь ввод времени, потом делаешь ввод данных для расчета зарплаты

    Reply
  6. ccserg

    (5)спасибо за подсказку , хорошая штука

    Reply
  7. AkANz

    (3)

    Не могу найти такой документ в ЗКГУ 3, или он только в ЗУП присутствует

    Reply
  8. ccserg

    (7) в ЗКГУ 3 есть «Данные для расчета зарплаты »

    предварительно настроить «Шаблоны ввода исходных данных»

    Reply
  9. AkANz

    (8)

    Шаблоны ввода исходных данных

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

    Reply
  10. roman.ch

    (8)Сергей,все равно спасибо за обработку, помогает тем, что, в документе ввод данных для расчета зарплаты, не заполняется кол-во дней по умолчанию(это оч не нравиться бухгалтерам). А с обработкой, получается здорово.

    Reply
  11. tena

    Подскажите, пожалуйста, в ЗУП 3.1 работать будет?

    Reply
  12. ccserg

    (11)не уверен , но скорей всего будет

    Reply
  13. tena

    (12) я сильно извиняюсь, но не могли бы проверить? см мало, скачаю, а вдруг не будет работать((

    Reply
  14. ccserg

    (13)проверил на демо базе , работает

    Reply
  15. tena

    (14)

    проверил на демо базе , работает

    спасибо!

    (14)

    в столбцах редактируете количество часов явок (при этом количество дней явок остается прежним , и не меняется обработкой

    Не очень поняла этот момент. Кол-во дней нельзя изменить? На скрине колонка есть, она не редактируется?

    Reply
  16. ccserg

    (15) дни не редактируются, подразумевается что количество дней рассчитывается исходя из графика минус неявки , как задумано в программе , вроде нет нужды редактировать дни

    редактируется количество отработанных часов

    Reply
  17. kiv45

    Сергей, может поможете решить вопрос: https://forum.infostart.ru/forum68/topic179088/?

    Reply
  18. ccserg

    Обновления файла :

    31.01.2018 — исправлена ошибка заполнения табеля .

    очень странно что никто не жаловался по поводу этой ошибки ,

    если будут ошибки пишите тут , буду исправлять

    Reply
  19. user636444_dolgih-87

    (18) Почему не нет возможности заполнить другие виды времени, кроме явки (Я), у нас несколько видов планового времени и их хотелось бы заполнять сводно по часам

    Reply
  20. ccserg

    (19)возможность как раз есть

    выберите эти виды времени в верхних полях , и заполняйте в соответствующих столбцах

    на картинке показано

    Reply
  21. user636444_dolgih-87

    Не получается.!!! У меня два вида норм времени в графике, соответсвенно два разных оклада. При заполнении сводно вообще не подхватывет отработанные дни и часы на эти виды времени в этой обработке. Может быть я что-то делаю не так???

    Reply
  22. user636444_dolgih-87

    (20)Еще раз проверила……нет не работает, если другие виды времени, а не предопределенная Явка. Проставляю колич-во часов по колонкам обработки, в программном табеле не меняет

    Reply
  23. ccserg

    (22) а вы время выбрали в полях ?

    проверил , создал свой вид времени , работает

    проверьте есть ли буквенный код в виде времени

    после ввода часов в обработке кнопку «Заполнить документ» нажимаете ?

    Reply
  24. user636444_dolgih-87

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

    И еще столкнулась с проблемой!!!. Хотелось бы видеть несколько знаков после запятой. У вас возможность, допустим у Явки только один знак

    Reply
  25. ccserg

    (24)какая конфигурация у вас ?

    Reply
  26. user636444_dolgih-87

    ЗИКГУ

    Reply
  27. user636444_dolgih-87

    Я проделывала, то что у Вас в скрине много раз…но когда нажимаешь кнопочку заполнить , не меняется отработанные часы отклоненные от нормы. Так же столкнулась, что обработка не смогла распределить 15,1 час по дням, в последний день поставило -0,1 час

    Reply
  28. ccserg

    (26)

    не понял , где тогда не меняет количество часов , если распределяет , скрины дайте



    Максимальное количество видов времени на одну дату должно быть 2. у вас 2 ?

    Reply
  29. user636444_dolgih-87

    (28)

    Reply
  30. user636444_dolgih-87

    Конечно два, у Вас ведь обработка об этом предупреждает.

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

    Reply
  31. ccserg

    (29)

    ошибку с отрицательным значением поправлю , а так все заполняет

    Reply
  32. user636444_dolgih-87

    вот…воспроизвела ситуацию с двумя видами норм времени

    Reply
  33. user636444_dolgih-87

    поправьте количество знаков после запятой еще. И воспроизведите, если у человека еще и командировка на пару дней и еще больничный ( это я про несколько норм времени)

    Reply
  34. ccserg

    (32)в чём там ошибка ?

    я вижу что дней и часов нет у сотрудника , наверно график не заполнен ?

    Reply
  35. user636444_dolgih-87

    скрин графика самый первый

    Reply
  36. ccserg

    (33) невыходы заполняются по документам с неявками , и переносятся в табель по неявкам , не понял этот момент …

    Reply
  37. ccserg

    (32)понял ,у неё Явок нет , только другие виды времени , поэтому и не заполняет

    нестандартная ситуация , скорей всего не буду ничего тут править , это уже под вас лично делать

    Reply
  38. user636444_dolgih-87

    Давайте я Вам объясню. У меня есть два вида оклада, к которым я креплю разные виды времени, так как разные отработанные часы по этим окладам. Ставлю галочку в настройках программы, использование несколько плановых видов времени. Пытаюсь занести сводно эти часы вашей обработкой, но не получается, на скрине видно, что в обработке даже норму не подгребает. Я бы могла сделать эти часы показателями времени в целом за период, а затем данными для расчета з/п внести их , но такой вариант не подходит из-за отработанных дней.

    вот формула для каждого оклада: Оклад */НормаЧасов*ВремяВЧасах /НормаДней*ВремяВДнях

    Reply
  39. user636444_dolgih-87

    Ну….слава богу…..хоть поняли меня))))) а то, я уже в своих способностях засомневалась))))))

    Reply
  40. user636444_dolgih-87

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

    Reply
  41. sergey_s_

    Сегодня вышла ошибка, при заполнении табеля за «сентябрь»

    нужно: явка-80ч, ночные-80ч

    В табель попадает так явка-80ч, ночные-40ч

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

    Reply
  42. ccserg

    (41) вы обработку давно скачивали ? возможно уже исправлял это

    Reply
  43. sergey_s_

    (42) ошибка при заполнении повторяется, прилагаю скрины заполнения табеля

    явки заполняет правильно,

    ночные не полные часы — из 80ч проставляет 60ч

    до сентября все работало отлично, может это из-за того, что 1 и 2 число выходные?

    версия: «ЗКГУ 3 _ЗаполнениеТабеля сводно 1.1.epf»

    Reply
  44. ccserg

    (43)

    повторил ошибку у себя , исправлю

    Reply
  45. sergey_s_

    (44)

    Если можно, сделайте поскорее!!!

    Reply
  46. sergey_s_

    Проверил, на ЗГУ 3.1.6.54 — теперь заполняет верно.

    Спасибо за быстрое решение проблемы.

    Reply
  47. user636444_dolgih-87

    На обновлении 3.1.8 обработка перестала работать(((

    Reply
  48. ccserg

    (47)

    хм , нет кнопки в документе ?

    посмотрю что можно сделать

    Reply
  49. ccserg

    (47)

    кнопки нет , пока непонятно в чем дело , но обработка работает из меню «Еще»

    скрин :

    Reply
  50. ccserg

    1с Записали ошибку 30165685

    исправят , кнопка появится

    Reply
  51. TORIS

    (50) Добрый день, на ЗГУ 3.1.8.246 не работает. ошибка во вложении

    Reply
  52. ccserg

    (51) у меня на 3.1.8.246 ошибка не повторяется,

    у вас конфигурации изменения не вносили в документ табель ?

    а именно на это поле ругается

    Reply

Leave a Comment

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