<?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='\
Чует мое сердце, что и до Документооборота начальники доберутся. Плюс авансом за труды.
Дык вот у нас добрались, сейчас страдать приходится :), После «успешного» внедрения документаоборота, чует мое сердце будет переезд бухгалтерии на эту платформу
Хорошая задумка. но вот у нас возникает след. задача: Когда исполненный документ на бумаге (подписанный руководителем) возвращается делопроизводителю на регистрацию, она на основании входящего делает исходящий и сканирует в него бум. документ и регистрирует. Так вот как сделать чтобы в момент регистрации исходящего… «закрывался» автоматически связанный входящий (чтоб менял статус на исполнен) ?
дык все аналогично, только надо просмотреть связанные документы и нужному изменить статус.
Объект у Вас есть, а от него можно всю цепочку размотать 🙂
Подскажите, при попытке добавить доверенный путь в разделе «Надежные расположения» к локальной папке TEMP 1С (C:UsersUSR1C…AppDataLocalTemp) выскакивает ошибка
«указанный путь не является допустимым расположение либо ….»
И не дает добавить данный путь — а 1С не создает файлы — не может записать в эту папку.
(5) skteks, добавлять надо на сервере, эта донастройка для клиент-серверного варианта. А по ошибке, скорее всего у пользователя, под которым проводите операцию, нет прав на доступ к данному каталогу. Попробуйте настройть office залогинившись под пользователем USR1C…
Дело не в правах, права дал полные — админские (на сервере для юзера USR1C8), дело в в том, что Word не дает добавить папку «C:UsersUSR1C…AppDataLocalTemp» в надежные расположения! И по политикам безопасности это правильно — ведь туда может писаться все, что угодно, она ведь указывается как временная в Windows. Пробовал и залогонившись под USR1C… Тоже самое — ругается. Как можно обойти эту проблему? Иначе не работает автозаполнение шаблонов
оно по другому не заработает, т.к. в office выполняются макросы, попробуй «C:UsersUSR1C…AppDataLocal» и галочку вложенные папки включить
Сделал как Вы сказали (поставил галочку «включить вложенные папки») — не получилось. Все равно не пишет в папку Temp — не устанавливает ее доверенной.
попробуй выбрать не папку Temp а выше уровнем
Ссыль
т.е. полный путь «C:UsersUSR1C…AppDataLocal», ну и на серваке обязательно разрешение макросов и ActiveX без запросов
Только что проверил, у меня на серваке стоит 2007 офис, и никаких проблем с добавлением как папки Temp, так и других
Почитай на технете мелкомягких, может чего с политиками
Сделал все как Вы говорили — все равно вылезает ошибка — вот в этом месте — не пишет файл в эту папку
(СтарыйПутьКФАйлу = C:UsersUSR1CV8AppDataLocalTEMPимя_файла)
//заполняет поля и строки в файле MSWord формата 2007+
Функция ЗаполнитьФайлMSWordВXML(ДвоичныеДанныеФайла, ТекущаяВерсияРасширение, МассивДанныхДляАвтоЗамен, ЗаменятьПространствоИмен = Истина) Экспорт
СтарыйПутьКФайлу = ПолучитьИмяВременногоФайла(ТекущаяВерсияРасширение);
ДвоичныеДанныеФайла.Записать(СтарыйПутьКФайлу);
НовыйПутьКФайлу = ПолучитьИмяВременногоФайла(ТекущаяВерсияРасширение);
Макросы включил, ActiveX тоже. Папку указал C:UsersUSR1CV8AppDataLocal\r
(галочку отметил — «включая вложенные папки)
Можно ли временную папку переопределить только для 1С? У меня тогда и для Word-a меняется (пробовал сделать C:Temp)
Пробовал уже на двух серваках совершенно разных:
на одном Windows server 2008, Office 2010, 1C Документооборот 2.0.16.1 Платформа 8.3.8.1479
На другом
Windows 7, Office 2015, 1C Документооборот 2.0.16.1 Платформа 8.3.8.147912345
Как только меняю для пользователя USR1CV8… темповую папку (можно в ПанельУправления-Система-Дополнительные Параметры Системы-Дополнительно-Переменные среды) так сразу и Word не разрешает ее добавить в надежные хранилища по соображениям безопасности. Получается только конфу править — путь переопределять вручную?
Видимо надо рыть реестр, судя по всему проблема в политиках безопасности, если сам говоришь, что как только переопределяешь папку Temp, то Офис ее перестает воспринимать как надежную.
Посмотрел реестр у себя, так вот, для пользователя в качестве папки TEMP в реестре прописан C:UsersUSR1CV8AppDataLocalTemp.
Единственное отличие, которое нашел, это то что надежное расположение для офиса задано в профиле локального администратора сервера
т.е. у пользователя ServerName / Administrator
А у юзера USR1CV82 никаких папок не задано, и еще, для пользователя Administrator папка Temp изменена на C: emp
т.е. расклад такой
Пользователь USR1CV82
все настройки путей по умолчанию
Пользователь Administrator
Переменная Temp& TMP C:Temp\r
Надежные издатели C:UserUSR1CV82AppDataLocal
Добрый день. Разобрался с проблемой — вопрос решился обновлением на конфигурацию 2.0.17.1. И больше ничего не нужно — автозаполнение работает, файлы обновляются.
Доброго времени суток.
Решил воспользоваться вашим обработчиком.
В РС «Произошедшие бизнес события» информация «Не удалось обработать».
Что может быть?
Код доработал под свои документы. Сам не программист.
Разобрался. Спасибо за обработчик.
В РС «Произошедшие бизнес события» информация «Не удалось обработать». С чем связано?
(16) evtushenkoav, В общем решил проблему так, скопировал текст обработчика во внешнюю обработку и в отладке посмотрел где ошибки возникают. Подправил. Все пошло.
(15) а можно поделиться кодом?
Скажите, кто-нибудь пробовал, с LibreOffice и соответственно файлами формата odt данная доп. обработка по автозаполнению файла должна работать?
У меня как-то не очень хочет… (у учетной записи 1с на сервере есть права администратора, уровень безопасности в Либре на сервере установлены в минимум, добавлен доверенный источник на путь C:UserUSR1C..AppDataLocal)
(20) Все работает, прошу пардона 🙂
(12) вот у меня вопрос такой)
Если документ уже зарегистрирован, эта обработка как себя поведёт?
У нас просто настроено так, что если документ «Служебная записка» создал руководитель, то он идёт на «Рассмотрение».
Если создал простой сотрудник, то — документ сначала на «Согласование», затем на «Рассмотрение».
Т.е. мне нужно будет настроить авторегистрацию на эти два процесса — 1. регистрация после согласования и 2. регистрация при старте задачи на рассмотрение.
(22)Сделал таким образом: по процессу документ идет на регистрацию, я назвал задачу «Авторегистрация», направляется пользователю «Авторегистратор». По этим параметрам ловим событие и регистрируем документ допобработчиком. Все остальное рулится на этапе конфигурирования карты (шаблона) бизнес-процесса условиями. Т.е. в шаблоне БП ставим задачу «Авторегистрация» на нужное место. Проще всего условия вам нужные настроить при конфигурации шаблона БП с помощью блок-схемы, но можно и таблицей, там просто условия муторно прописывать.
(23)
А пользователю при этом приходит задача «Ознакомиться с результатами регистрации»? Хотелось бы избежать этого 🙂
(24)Задача ознакомления формируется, но автоматически исполняется, без вмешательства человека)) в том же обработчике авторегистрации.
(25) Спасибо, попробую такой вариант)