<?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='\
Спасибо! Как по заказу, как раз подобную фишку нарисовать попросили 😀 Как руки дойдут отпишусь на сколько понравилось
Буду рад, если хоть чем-то поможет 🙂
Загрузка табеля для 7.7 может тоже кому пригодиться 😉
http://infostart.ru/public/19759/
(0) Кстати, если реализуешь, формирование бланка табеля со списком людей буду ООООООчень благадарен, т.к. самому писать не придеться 😀
А вообще если есть желание и возможность посмотри может тоже какие идеи подчерпнешь
Обработка не запускается ЗУП 2.5.18.2 ошибка
{ОбщийМодуль.НастройкаПравДоступаПереопределяемый(468)}: Поле объекта не обнаружено (Проведение)
ПараметрыПроверкиДокумента.Вставить(«ПроверятьПроведениеДокумента», (МетаданныеДокумента.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить));
Хорошая мысль, значительно облегчит труд кадровика. Жаль что для УПП не подходит….
спасибо я сделаю такую на семерке..
(4) это в какой момент вываливается? в момент открытия, при загрузке или при создании документа?
(5) под УПП, скорее всего, надо некоторые общие функции переопределить (названия общих модулей или функций скорее всего отличаются)
(6) не стоит, здесь где-то много таких есть. Если надо могу выложить/сбросить. Под 77 у меня тоже есть 😉
(5) О! А мне как раз под УСО (УПП) надо, значит придеться свое писать 😀
(3) Посмотри в сторону этого варианта:http://infostart.ru/public/61090/
Выгружает список сотрудников. И в УПП тоже работает.
можно вопрос? вы писали их под себя или для начальника? то есть бухгалтера или руководителя?
В момент открытия. отключаю строку №642 в Процедура ПриОткрытии()//РаботаСДиалогами.УстановитьДоступностьФормыДляРедактирования(ЭтотОбъект, ЭтаФорма); обработка запускается. работает нормально. спасибо.
Привет. Загрузку шаблона табеля сделал бы для ВСЕХ, а то обработку скачал и не протестить — шаблон еще сутки ждать.
Спасибо. Помогла для реализации собственных задач
Спасибо. Очень пригодилась. Но возникли проблемы по загрузке табелей со своей спецификой (вахтовики и водители)
Спасибо. Как раз нужно подобная вещь. сейчас скачаю. но думаю нужно будет доработать. но ничего страшного главное есть с чего начать. а это главное.
Спасибо. Адаптировали для реализации своих задач — сЪэкономили много времени.
Пожалуйста 🙂 Рад, что помогло!
Загрузил, хоть ЗУПом пока тьфу-тьфу не занимался. Зато пригодится код чтения из Excel — надо загружать С/Ф. Правда там у каждого поставщика свой бланк — придется долго ковыряться. А за обработку — жирный плюс!
Спасибо за обработку. Сэкономил кучу времени. Пришлось докрутить тонкий момент: в разные табели приходят с разными разделителями целой и дробной частей («.» и «,»). Поправил, убрав «,» из массива «Разделители».
Показала бухам — пищат от восторга. У нас более 500 сотрудников. Кадровики заполнять табеля в программе не хотят. Теперь будет всем радость
А что написать в опциях загрузки табеля, чтобы загружаемые сотрудники дописывались в табличную часть выбранного документа?
Это все очень красиво… Но я один не понимаю ЗАЧЕМ это нужно?
Нам табеля присылают обособленные подразделения по этому шаблону, и потом все загружаем в ЗУП.
(21) Возможности дописывать табель нет.
(23) Lyuda11, А как же кадровые документы отклонений, которые двигают регистры, которые используются программой? Например, для расчета остатков отпусков. А если есть эти документы, заполнить можно по кнопке без всяких обработок.
(25) Lyns_owner, У нас народ работает по табелю (маляры), определенного графика у них нет, по которому можно было бы заполнить табель с учетом отклонений.
(26) Lyuda11, Не увидел в вашем сообщении ответ на мой вопрос. Может, я его плохо сформулировал? Или, может быть, вы не знаете, для чего служит регистр «Состояния сотрудников организаций»? И не вводите кадровые отклонения, нарушая при этом ТК и завышая количество дней отпуска сотрудников (в убыток компании).
(27) Lyns_owner, для этого сотрудник должен быть принят на работу по определенному графику. А если графика нет? Отклонения то ведь от какого то графика вводятся? Мы контролируем чтобы сотрудник отрабатывал определенное количество часов в месяц.
(28) Lyuda11, Смысл не в отклонении от графика, а в увеличении рабочего года для целей расчета остатков отпусков.
Вы фиксируете, сколько дней/часов работник прогулял без сохранения зарплаты, на это кол-во дней у него увеличивается рабочий год для целей расчета остатков отпусков, число дней в году при этом остается прежним. Работать ваши маляры могут по пятидневке, просто фиксировать их невыходы вы будете на рабочие дни. Они работают на сделке или на окладе? Либо вам необходимо переписать абсолютно весь функционал в системе, опирающийся на регистры, которые двигают документы отклонений, т.к. документы отклонений вы не используете.
Банальный пример:
Сотрудник «Прогулял» (проболел без справки, брал дни за свой счет и т.д.) за год с момента приема на работу 50 дней. Сколько дней отпуска вы ему должны будете оплатить через год после приема на работу?
Скачаем обработку, посмотрим, потом отпишимся.
Своевременно. Как раз такое надо было. Отправляем сотрудников на чужие объекты работать. Они оттуда табеля в exel предоставляют. Попробуем этой обработкой воспользоваться. Спасибо.
Если в «Шаблон» пишем/шифруем «как положено»(типа Я8, НН, ДО) тогда это очень неудобно. Т.к. табельщики или тек кто этим занимается факультативно — любят писать упрощенно — в один символ/знак.
Подскажите, данная обработка работает на зуп 2.5.58.1?
При открытии обработки выходит ошибка {Форма.Форма.Форма(1389)}: Метод объекта не обнаружен (ПолучитьРабочуюДату). ЗУП релиз 2.5.65.2
Спасибо уже не надо..подправил.
Возник еще один вопрос. При загрузке данных из Excel при днях месяца равных 30 все садится корректно. Если же дней в месяце 31 или 28(февраль) то данные отличаются. Стоит символ В, но при этом указывается время в часах. Может кто сталкивался с таким?
скиньте мне файл табеля — если будет секунда св.времени гляну
(37) пример табеля
(38) Sava944, у меня все ОК
выложил обновление обработки под последние релизы (изм.месторасположение общих функций)
То есть тут дело в настройках самой конфиг. ЗУП? Если у меня садит неверно? И где скачать последнюю версюю обработки под 82?
(40) Sava944, скорее всего дело не в настройках. Последняя версия обработки уже здесь (если нет sm могу на ящик кинуть)
Буду признателен…..очень надо время поджимает…Savelich@list.ru Спасибо большое.
(41)
Вот такую ошибку выдаёт:
{Форма.Форма.Форма(1173)}: Метод объекта не обнаружен (ОткрытьФормуВыбораСотрудникаОрганизации)
ПроцедурыУправленияПерсоналомПереопределяемый.ОткрытьФормуВыбораСотрудникаОрганизации(Элемент, Документ.Ссылка, Истина, Дата, мГоловнаяОрганизация, 1, СтандартнаяОбработка, Элемент.Значение);
При изменение периода на форме:
{Форма.Форма.Форма(586)}: Недостаточно фактических параметров
УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной(«глКомпонентаСклоненияФИО»), МесяцСтрокой, 4, МесяцСтрокой);
Не загружает… пишет что не найдена организация и не найден сотрудник. Я вбил его табельный номер и ФИО. Вбил организацию в эксель.
При этом каждый раз после загрузки очищаются реквизиты обработки: Дата, подразделение и тд
Релиз 2.5.65.2
(43) TODD22, не все глобальные функции обновил 🙁
Обработку исправил и перезалил.
Заодно добавил в настройках порядок определения таб.номера: в типовой автонумерация таб.номеров идет с ведущими нулями, а у некоторых организаций табельный присваивают руками (без нулей)…
значит у вас в соответствующих полях шаблона табеля не проставлены эти значения, т.е. грузятся пустые значения
Спасибо тщательную проработку темы!
Пришлось дорабатывать под свой формат экселя и работу в ночные смены- все прошло легко, благодаря хорошему коду Автора!
Благодарю! Рад что помогло 🙂
Надо будет попробовать. актуально для нас.
Возможно ли переделать под LibreOffice?
В планах такого не стоит 🙂
Но код открыт и все в Ваших руках!
Отличная обработка с возможностью доработки под свою конфигурацию и требования. Пользуюсь с 2011год с небольшими доработками.
Пришло время и мне табель загружать. Скачал, посмотрел, переделал под наши требования. Сэкономил кучу времени. Спасибо!
Вот только одно, может падать платформа если не закрывая обработки из разных файлов грузить (падает на строке
Если Форма<>Неопределено Тогда
ФормаЭлементыФормыОтработанноеВремя.ДобавитьСтроку();).
Добрый день!
Не могу воспользоваться обработкой, выдает ошибку следующего содержания:
{ОбщийМодуль.НастройкаПравДоступаПереопределяемый.Модуль(474)}: Поле объекта не обнаружено (Проведение)
ПараметрыПроверкиДокумента.Вставить(«ПроверятьПроведениеДокумента», (МетаданныеДокумента.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить));
Не подскажете в чем может быть проблема?
Спасибо.
добрый день,
А возможно ли изменить запись в документ из загруженных данных не в документ табель учета рабочего времени, а в документ индивидуальные графики работы,
st1979@yandex.ru
Спасибо всем кто откликнется, соответственно за вознаграждение
Отличная штука после небольших доработок. Плюс за код (читабельно).
Подскажите, сохраняю печатную форму табеля в excel (ЗУП релиз 2.5.91.1) с типом файла «Лист Excel (*.xls)» и у меня различается количество колонок табличного документа (всего 33) и количество колонок в шаблоне (всего 62).
Как вообще формируется экселевский шаблон для данной обработки?
Причина в строках с различной шириной колонок в области «Подвал», пришлось править макет «Т-13».
У меня есть такой отчет с другого сайта. поняла что качает данные из файла Т13 — табель
ФормаЭлементыФормыОтработанноеВремя=Форма.ЭлементыФормы.ОтработанноеВремя;
ФормаЭлементыФормыОтработанноеВремя.ДобавитьСтроку();
ФормаЭлементыФормыОтработанноеВремя.ТекущиеДанные.Сотрудник=Сотр;
ФормаЭлементыФормыОтработанноеВремя.ТекущиеДанные.ФизЛицо = Сотр.ФизЛицо;
Вылетает ошибка, что дыннае не являются объектного типа Сотрудник
В отладчике ТекущиеДанные пусто (
Не в обиду автору разработки , тем, кто вроде меня не является программистом , советую пока воздержаться от скачивания данной обработки.
Выскакивает ошибка :
ФормаЭлементыФормыОтработанноеВремя.ДобавитьСтроку();
ФормаЭлементыФормыОтработанноеВремя.ТекущиеДанные.Сотрудник=Сотр;
ФормаЭлементыФормыОтработанноеВремя.ТекущиеДанные.ФизЛицо = Сотр.ФизЛицо;
Что делать с этим непонятно.
(58),(57) Скажите, в какой момент выскакивает ошибка? или пришлите файл табеля что Вы грузите (mail-smooth собака mail.ru), я посмотрю. Но у меня грузит все нормально…
(59) Ошибка выходит после нажатия кнопки «Загрузить из XLS» по достижении искомого куска кода. Точнее, выходила когда было нужно срочно загрузить табели. Сейчас хотел отправить файл xls для демонстрации ошибки — ошибка не проявляется , хоть убейся, даже на тех файлах , на которых раньше выскакивала ! Законы Мерфи в действии !!!!
Добрый день, обработка быстро загружает данные?
Добрый день. Если можно перешлите пожалуйста файл обработки под 8.2 на почту . Почему-то не скачивается файл…Почта afanaseva@binar-plus.ru Заранее Большое спасибо.
Игорь, Вы написали, что есть такая же обработка для ЗиК 7.7. А можно пжлст на почту
a-alinova@mail.ru, попробуем применить у себя. Спасибо. Плюсик за мной.
отправил Вам на почту 3 варианта. Посмотрите, может что сможете из этого для себя полезное извлечь 😉
При попытке запустить выдает ошибку:
{Форма.Форма.Форма(1398)}: Метод объекта не обнаружен (ПолучитьРабочуюДату)
у нас ЗУП 2.5 (2.5.61.1)