<?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='\
На самом деле можно включать/отключать или не устанавливать ту или иную подсистему в конфигурацию, кроме «Фабрики событий», она должна быть всегда, а также дописывать, под использование с «Фабрикой», новые подсистемы и объединять их в разных вариациях и количествах, на сколько фантазии программиста хватит;-)
(0) Сегодня-завтра это все буду ставить к себе в реальную базу, может кто чего найдет из багов, глюков и т.п. — пишите, буду рад:-)
Уважам-с…
🙂
Судя по описанию — хорошая вещь. Работа проделана хорошая.
«СКАТ» , там сделано на «регистрах правил»
Подсистему «доп. права документов» можно было бы еще гибче сделать. Посмотри на конфу
P.S. Судя по скринам, ты не пользуешьсяColorer for Openconf . Ставь скорее — вещь просто незаменимая!
(4)
О, спасибо, как-то пропустил эту штуку, а удобно дюже.
Пока нашел для чего она нужна, вообще мозги начали кипеть — штука полезная для жесткого контроля прав, но просьба, всё таки сначала описывать назначение — желательно небольшим доступным текстом, а потом уже раскрывать как и куда оно подключается и встраивается, честное слово было желание закрыть и не читать дальше и выяснять что это и к чему привязывается, а это 80 % потери потенциальных клиентов.
(6) Описание читайте, там написано:
И пошло описание подсистем вкратце, подробнее — приведены ссылки. Тем более, не только за правами контроль, а и возможность прикреплять файлы к любым документам, а это удобно для бухов для первички…. Т.е. оригиналы-сканы доков с печатями и подписями можно хранить, всякие свифты и т.д. в доках можно хранить….
В общем, применение не ограничивается только правами, читайте внимательно….
Сударь я всё понимаю конечно — но мне лично приходит расслыка в которой указано «Подсистема рассчитана на установку и работу в любой конфигурации, установка требует минимальных изменений в конфигурации, прописать пару строк в глобальном модуле и объединить с md’шкой (добавляется несколько объектов), подробнее см. описание установки. В дальнейшем, после установки в какую-либо конфигурацию, если обновлять эту конфигурацию типовыми обновлениями, то нужно будет только прописать заново эти пару строк в глобальном модуле, после обновления, и все.
«Фабрика событий» делалась для объединения и совместной работы в одной конфигурации двух подсистем «Доп. права доков» v 2.0 » — честно слово желания открывать и смотреть а что там такое, небыло никакого. Извините, я должен телепатическими данными обладать что бы разгадать гениальность творения ?:)
(8)
Было бы неплохо, я про рассылку особо и не подумал, счас поправлю.
Видимо Вы так и не поняли о чем я говарю, ваше право как преподносить, но товар сначало показывают лицом, мне это напомнило как какой нить знакомый дает свою рекомендацию о новой книге или фильме — сначало идут 5 минут выплескивания эмоций вау хоу это круто это вынос мозга и так далее таких выплесков минут 5 утонуть можно — пока дождешься.. а о чем собствено произведение то, так и хочется скотчем рот залепить и как в том анекдоте — ты не умничай — пальцем покажи ?… 🙂 я же написал вещь полезная, но до сути и предназначения пока дойдешь — пропадает желание смотреть а что это вообще.
(8) Так лучше (на Ваш взгляд)? Если не видите изменений, то нажмите справа в меню ссылку «Очистить кеш публикации (beta)».
Извините если я несколько сам пережал с эмоциями:) обидеть не хотел — дейсвтительно замечательная и полезная обработка, желаю дальнейших успехов 🙂
(10) Я понял и, кстати, очень открыт в этом плане для советов, ведь это в моих же интересах….
(12) Так давайте, говорите, оно со стороны виднее, как понятней описать. Я не против, мне сложно просто со стороны оценить качество описания….
На много лучше — так правльнее, уже в описании при рассылке есть возможность получить информацию по задаче. Но с точки зрения покупателя у него понимание должно идти уже на а уровне названия темы публикации, задач к котрым оно прерасположено, напрмер взять преславутый всеми.. «перенумератор документов» — уже понятно что это такое и за что автора можно заклевать 🙂 — я в том смысле что образ узноваем на уровне темы — да ясна задача — и ясно что это за выложена обработка.
Чувствую, придется внедрить у себя.. посмотрим что там будет…
(16)
Когда внедрял, обновлял dll’ки, столкнулся:
http://www.1cpp.ru/forum/YaBB.pl?num=1275411076
З.Ы. Документированный баг восстановления настроек из реестра при обновлении старых версий dll’к
Если в стандартной процедуре записи элемента справочника указан параметр список периодических ( ПриЗаписи(СписПер) ) то выдаёт ошибку.
(18) Поправил, перезалил, попробуйте скачать заново. Изменился только код обработки класса фабрики событий, так что если она у Вас уже стоит в базе, то обновить можно только ее при установке md’шки поверх старой версии….
(0) Поправил класс «Фабрика событий» — вызов оригинальных событий…
Хотя formex у меня глючил, плюс поставлю за высокий профессиональный уровень данного решения.
Скачал фабрику в демо конфе все работает, а вот когда обьеденил выдает
__КлассФабрикаСобытий__=СоздатьОбъект(«__КлассФабрикаСобытий__»);
{Глобальный модуль(4017)}: Неудачная попытка создания объекта (__КлассФабрикаСобытий__)??? Что может быть??
(22) В обработке defcls класс фабрики объявлен?
Да я уже разобрался. У меня в каталоге базы лежал пустой defcls.prm база из за него ругалась. Как убрал все заработало
когда будет подсистема «сканы справочников»?
спасибо
(25) Ой, Че, извини, что так ее и не сделал, руки не дошли:-) Но в планах есть, хотя и не приоритет… Оч туго со временем в последнее время, просто:-)
по части сканов доков: при открытии документа в момент программного формирования слоязакладки Сканы проиходит мельканиемигание экрана, то есть визуально чувствуется процесс и создается впечатление глючности. Переделал этот процесс вместо ПослеОткрытия на ПослеСозданияФормы и все стало чудненько, визуальных эффектов нет. Автору на заметку для следующей версии)) Переделал на хранение вложений в MQ SQL базе, сейчас последние тестирования и до апреля запуск в работу, если интересно могу выложить. Автору спасибо за отличную работу!
(25) CheBurator,
А надо?
У меня есть универсальная (сканы всего:) ) сделано но основе этой разработки
(29) Если решишь выложить в свободный доступ — я не против, если что….
Подключил по инструкцию подсистему доп. права пользователей.
Появилась такая проблема, при вводе новых документов ранее даты запрета редактирования программа хоть и ругается, что нельзя создавать, но все равно дает записывать документ. Как я понимаю это из-за перехватчика событий ПриЗаписи()? Что-то можно с этим сделать?
Использовал перехватчик предопределённых событий очень давно, тогда или из неверной реализации или по какой другой причине сыпались часто глюки и были пропуски. Сейчас попробую реализовать заново, т.к. есть действующий пример. Спасибо за реализацию.
Вопрос такой . При интеграции данной подсистемы(Конкретнее меня интересует «Скан документов»),на сколько я понял, вкладка Сканы создается для всех документов. А можно ли Указать список документов для который это нужно . а не для всех .
можно конечно
я делал так:
в файле __КлассПодсистемыСканыДоков__.ert
Показать
Спасибо
Всё сделал как написано, но вкладки Сканы в Документах нет. И возможно ли такую вкладку ещё добавить к справочникам? В частности меня интересует справочник номенклатура.
(36)
А в демо-базе, что идет тут, есть вкладка?
Когда-то были планы сделать и для справочников подсистему, но потом уже руки так и не дошли, да и снеговик (8-ка) уже во всю используется, уже назад к клюшкам (7.7) сильно не вернешься.
Проверил в демо-базе тоже нету