Календарные графики v1.1: Просмотр, редактирование, автозаполнение календарей




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

66 Comments

  1. clappa

    * Добавлены данные для заполнения стандартных календарей на 2007 год

    Reply
  2. корум

    Господа, где отзывы?

    Reply
  3. mgmac

    ух…. молодец

    +1

    Reply
  4. clappa

    По немногочисленным, но настойчивым просьбам:

    * Реализована возможность автозаполнения сменных графиков произвольной периодичности (ранее было ограничение на периодичность до 8 дней)

    * Реализовано автозаполнение графиков по формуле, задаваемой пользователем.

    Это может пригодиться, например, для вахтовых графиков. Формула задается на встроенном языке 1С, вызывается для каждой даты из периода, и должна возвращать количество рабочих часов в указанной дате.

    Например, для вахтового графика «Работа по 8 часов каждый месяц с 1 по 15 число» будет выглядеть: ?(ДеньМесяца <= 15, 8, 0)

    Reply
  5. support

    а скриншот можно добавить?

    Reply
  6. ДмитрийF

    Полезная обработка.

    А где формулу то вводить???

    Reply
  7. clappa

    [to Дмитрий] В обработке заполнения календаря надо выбрать тип графика «Пользовательский». Тогда появится поле для ввода формулы. Список переменных, которые можно использовать в формуле, приведен в справке по отчету.

    Можно сохранить настройку заполнения вместе с формулой в файл Calendar_Fill.ini (вручную, или с помощью кнопки «Сохранить» в обработке заполнения календаря) — тогда соответствующая настройка станет предопределенной, и будет доступна для выбора в поле «Тип графика» другим пользователям и в других базах.

    В файле Calendar_Fill.ini уже прописаны для примера две пользовательских настройки («Пользовательский вахта 1-16», и «Пользовательский вахта 17-31»)

    Reply
  8. support

    Во, по скриншотам однозначно +1

    Reply
  9. TimVG

    Очень интересно, буду смотреть.

    Reply
  10. discorat

    Супер! Еще бы табели рабочего времени заполнять..Ваще красота..

    Reply
  11. clappa

    * Добавлены файлы для заполнения стандартных календарей на 2008 год в соответствии с постановлением Правительства РФ от 11.08.2007 № 512

    Reply
  12. CheBurator

    Однозначно к чему-нибудь прикручу… уж больно красиво…

    Reply
  13. SvetikND

    Классно! Очень наглядно

    Reply
  14. таксебе

    Замечательно и наглядно

    Reply
  15. gucci76

    Очень красивый, хорошо продуманный интерфейс! Здорово!

    Reply
  16. das

    Замечательно!

    Хорошо бы еще продумать для бухгалтерии в этом ключе.

    Например: для заполнения табелей (есть такая обработка).

    Reply
  17. CheBurator

    http://www.ya.ru

    на запрос

    «русский и английский формат календаря»

    выдает абсолютно нерелевантный результат — первый раз сталкиваюсь…

    Reply
  18. CheBurator

    хорошо бы добавить вывод календаря по выбору — в «американском» (по горизонтали» и русском — по вертикали…

    Reply
  19. clappa

    [18] Добавить ещё один формат — не проблема. Но я, к сожалению, не знаю, как должен выглядеть «кошерный» американский календарь. Кроме того, что недели идут «колонками» и воскресенье стоит перед понедельником, есть другие отличия?

    Reply
  20. ded00786

    Отличая обработка! Красиво, локанично, удобно, БЕСПЛАТНО!!!

    Автор — просто молодец, спасибо.

    Reply
  21. kate123

    Эх, мне б такую обработку, но только в 8.0

    Reply
  22. МП

    Отлично

    Reply
  23. gif

    Спасибо, мне очень нужно было, но не хватает опыта.

    Reply
  24. KsenaK

    Отличная обработка. Спасибо

    Reply
  25. Altair777

    ой!! Я промахнулся!

    «Хотел плюс»

    Reply
  26. Noy

    (25) Переплюсую!

    Reply
  27. Altair777

    (26) Спасибо, но еще 1 плюсик надо 🙂

    Reply
  28. Altair777

    (25) Оказывается, плюсик убирает минус!

    Вот гад этот Belomor в http://infostart.ru/profile/8089/blogs/705/?cp=all написал мне

    126. Belomor 08.11.2008

    (124,125) С тобой промахнулся — не туда на плюс нажал, захотел убрать но «+»-«-«=»-» 🙂

    Reply
  29. alex_sv

    Отличная вещь. Спасибо.

    Reply
  30. anellija

    Большое спасибо!

    Reply
  31. svegl

    Здорово

    Reply
  32. niko

    А откуда можно загрузить *.ini файлы календарей?

    Reply
  33. m-xolding

    Здорово! Очень удобно, легко и просто!

    Reply
  34. AS108

    Красиво!

    Reply
  35. Ваиль

    Замечательная обработка. Просто, лаконично, наглядно. Эталон!!! 😀

    Reply
  36. clappa

    Добавлены файлы для заполнения стандартных календарей на 2010 год в соответствии с постановлением Правительства РФ от 31 октября 2009 г. N 869

    Reply
  37. Grey

    Добротная вещь. Хорошо работает даже , когда графики из ряда экзотики.

    Очень пригодилась. Вот если бы еще ее аналог на 8.1. В общем большой плюс.

    Reply
  38. gutentag

    Спасибо!

    Reply
  39. lals

    (35) Извини но у тебя тоже эталон, так что ворую 😀

    Замечательная обработка. Просто, лаконично, наглядно. Эталон!!! 😀

    Reply
  40. мышильда

    Красота, глаз не отвести ! Спасибо!

    Reply
  41. Natalia

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

    Просто «сел и поехал» ))

    Красиво, классно — работает!

    Reply
  42. Kavar

    Автору ОГРОМНОЕ СПАСИБО!

    Обработка меня спасла! ❗ ❗ ❗

    Reply
  43. Dansur

    Сколько ни пользуюсь — ничего лучше не видел.

    Reply
  44. Natalia

    Использую обработку для себя с удовольствием ))

    Но несколько раз замечала странную проблему в ЗиК — смоделировать не могу, но периодически случается —

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

    Поскольку чудес не бывает — прошла поиском по конфигурации по Удалить()

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

    Не сталкивались с такой проблемой? Ломаю голову уже давно.

    Reply
  45. clappa

    (Natalia) Найдите функцию ОчиститьЧасыГрафика (она есть и в Calendar.ert и в Calendar_Fill.ert), и закоментируйте строчку

    Клндр.Удалить(спДаты.ПолучитьЗначение(Инд))

    Если проблема исчезнет — значит виновата обработка. Если нет, нужно искать причину где-то ещё.

    Reply
  46. Natalia

    Функцию-то нашла, и строчку тоже ))

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

    Reply
  47. maralex1

    Супер

    Reply
  48. AlexO

    а если нет ЗиК — как тогда? Может кто-нибудь скинуть данные на этот год из ЗиК или пример, как из ЗиК это вытянуть для использования в другой конфе?

    Reply
  49. rom-x

    Очень удобный отчет! В прикрепленном файле календари на 2012 год: 40 часов, 36 часов, а так же праздники.

    Reply
  50. Nady_71

    Отличная обработка! действительно помогает держать все графики в системе! Использую её давно, видела много других. Эта-без сомнения, самая хорошая и удобная во всех отношениях!)). Автору-огромное наше спасибо!))).Использую её как базовую для другой обработки, которая на основе этой выводит печатную форму графиков по сотрудникам по «роспись».

    Reply
  51. TrinitronOTV
    Nady_71 пишет:

    Отличная обработка! действительно помогает держать все графики в системе! Использую её давно, видела много других. Эта-без сомнения, самая хорошая и удобная во всех отношениях!)). Автору-огромное наше спасибо!))).Использую её как базовую для другой обработки, которая на основе этой выводит печатную форму графиков по сотрудникам по «роспись».

    полностью согласен с вами

    Reply
  52. lanSS

    С У П Е Р !!! Спасибо!!!

    Reply
  53. 2011b11

    Nady_71 пишет:

    Отличная обработка! действительно помогает держать все графики в системе! Использую её давно, видела много других. Эта-без сомнения, самая хорошая и удобная во всех отношениях!)). Автору-огромное наше спасибо!))). Использую её как базовую для другой обработки, которая на основе этой выводит печатную форму графиков по сотрудникам по «роспись».

    Присоединяюсь

    Reply
  54. Gulak

    ВОТ это да!!!! СУПЕР ОБРАБОТКА!!!

    Reply
  55. Gulak

    ВОТ это да!!!! СУПЕР ОБРАБОТКА!!!

    Reply
  56. Gulak

    Автору 1000 раз СПАСИБО!!!

    Reply
  57. Gulak

    1с-ки что додуматься до таково не могут? Либо просто не парятся по этому поводу? Я считаю что такие вещи изначально должны быть в 1с!!! Это же необходимость!!! Автору еще раз СПАСИБО!!!

    Reply
  58. mrd_84

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

    заполнения календарных графиков, таких, как графики рабочего времени

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

    базирующихся на компоненте «Расчет». Имеет возможность работы

    сохранения (и восстановления) календарей в внешних файлах.

    Некоторые возможности отчета (например, просмотр и редактирование графиков

    работы конкретных сотрудников) доступны только в типовых конфигурациях

    «1С:Зарплата и Кадры» и «1C:Комплексная конфигурация».

    В комплекте с отчетом идет файл с данными о заполнении основных

    календарей ЗиК (Праздники, 40-, 36- 30-, 24-часовая раб. неделя, отпуск по

    календарным дням) за 2003-2010 годы.

    Reply
  59. 2011b11

    Спасибо автору за отличную обработку, очень помогла. Огромное мерси!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Отличная обработка! действительно помогает держать все графики в системе! Использую её давно, видела много других. Эта-без сомнения, самая хорошая и удобная во всех отношениях!)). Автору-огромное наше спасибо!))). Использую её как базовую для другой обработки, которая на основе этой выводит печатную форму графиков по сотрудникам по «роспись».

    Reply
  60. tanekQ

    Автору СПАСИБО! Хорошая вещь и описание супер-расписано, как для младенцев!

    Reply
  61. XOCTEP

    Огромное спасибо за обработку! Встретил ситуацию, когда за Январь 2013 года календарь-пятидневку ЗиК тупо удваивал… боролись 2 дня по всякому. Обработка помогла очистить календарь и заполнить заново, после чего все заработало отлично! Ставлю плюс.

    Reply
  62. nysysimara

    спасибо, отличная обработка, работает без напильника

    и описание доступное любому пользователю, разжовано до мелочей

    Reply
  63. BuchBest

    Спасибо автору. Экономит кучу времени, не заменим при сменном графике работы!

    Reply
  64. yup

    Спасибо, прекрасная обработка! Еще бы добавить возможность загрузки из Excel, а не только ini.

    Reply
  65. niktas2009@yandex.ru

    Очень полезная вещь прикручиваю к конфигурации табель раб времени по подразделением с печатью формы Т-13. Допишу отдельное спасибо вам!!!!!!!!!!!!!

    Reply
  66. CheBurator

    А еще бы добавить автозаполнение типовых недель по 40 часовой неделе по производственному календарю. Производственный колендарь же можно получить с сайта 1с???

    Reply

Leave a Comment

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