<?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='\
нормально так ))
Я бы отказался (что и сделал в аналогичной задаче) от такого списка файлов, и делал бы записи в регистр сведений
(1) Да я люблю такие задачи, где простым эффектом решаютс сурьезные весчы.
(2) вы про какие файлы? про файл хранения настроек или файл семафоров. Файл семафоров часто меняется, незачем дергать базу. Кроме того, их можно и на FTP размещать, Если чо.
Идея нормальная. Пригодится для своих задач.
Ну запустил, клиент 1С, свернул и ушел пить кофе…
(4) Bacemo,
да вам все пригодится — какую обработку не возьми из последних 🙂
Что за задачи у вас такие?
(3)
Сергей, есть вполне себе надежные и ппростые средства системного администрирования и логгирования запуска и работы приложений.
Но жду от вас 1С:Управление межланетными полетами. С обязательным заделом под посещение Марса и Венеры 🙂
(6) AlexO, видимо задача побольше сообщений набить 🙂
1С: Назойливое очко Саурона.
Если всё выполняется в 1С же, почему бы список активных пользователей не использовать?
Объясните пож., зачем городить огород с файлами когда можно сделать тоже самое на активных пользователях и регистре сведений? Плюс безопасность (например чтобы никто удалить/поменять немог) можно было бы реализовать средствами 1С.
(5) stepan_shock, дальше создается зондекоманда, которая врывается к клиенту и ложит его лицом в пол 🙂
(11) adminfo2002, я бы сказал прямо в кофе:)
(9)(10) перечитайте пожалуйста условие задачи. Может быть я конечно не внятно объяснил, но о каком списке активных пользователей может идти речь, если речь идет о различных базах 1с в територриально удаленных подразделениях, пусть и связанных в VPN, замените для просветления VPN на FTP, может быть так проще будет понятно.
Речь вообще то о контроле за работой в РИБ базах.
(7) бесплатные, гибкие? Гибче, чем 1С? Дайде два.
(14) курите RTFM по винде, и будет вам щасте 🙂
Приходилось решать подобную проблему, решили виндовым скриптом, это в доменах.
2 fixin, а как быть с компами в НТТ? Куда, и главное когда, они будут выкладывать свои файлики 😉
(6) AlexO, у товарища задача простая — маней на скачку наскрести
чтобы никто не лазил по файлам руками можно либо на FTP хранить либо на SMB и сделать как с сусликом, который есть, но его никто не видит — запретить ls
З.Ы. — картинка очень понравилась 🙂
(13)
если базы на сервере, то еще и информация на сервере 1С есть
(15) бла-бла. Если знаете, пишите статью. А так больше на разборки времени потратится. Можно конечно аудит на запуск назначить. но потом этот аудит надо в центр передавать как-то, тем более компы не в домене. Да ну нафиг, в виндовом гуане копаться. Тут все под рукой и делается быстро.
(18) базы файловые. К тому же если бы базы были и серверные, они бы хранились на разных серверах. VPN — медленная, 1с через нее не взлетит.
а можно опубликовать текст скрипта, интересно опробовать у себя.
Что-то по-моему перемудрили… Костыль какой-то получился. Типичная задача так называемого эхо-сервера. Создаётся база «Прослушиватель», а в остальных просто раз в период отсылаются пакеты. Для прослушивателя понадобится ВК. Таких куча. Как примерhttp://infostart.ru/public/69992/ Отсылку можно сделать и без ВК… через WinSock. Хотя если делать правильно то на клиенте нужна ВК key hook-ера, чтобы обрабатывать нажатия клавиш пользователей в 1С 🙂
(21) и это вы называете перемудрили? 😉
имхо с пакетами как раз сложнее. 😉
Жесть какая ))) Согласен с (7) AlexO, есть другие способы решения данной проблемы, куда более мм… как бы это сказать, достойные что ль. Достаточно одного грамотного сис. админа.
Это как сделать 25 печатных форм по каждой организации «забыв» что есть такая вещь как параметры в макете, а информацию можно взять из справочника.
(23) бла, бла, бла. Способы в студию!
Эм, ну можете забить в поисковике строчку: «Учет программного обеспечения». Посмотреть на доступные варианты программ. Есть там и бесплатные по моему. По факту ничего против Вашего способа не имею, просто есть другие, вполне возможно проще и надежней.
есть хорошая книжка Системное программирование, рекомендую…
(25)(26) все это неконкретика. я и сам посылать в Гугль умею. Пока не предложено других конкретных способов, буду юзать свой. 😉
Конкретика — это озвучивание конкретного метода.
Например — назначить аудит на запуск и периодически скриптом скидывать журнал аудита в центр.
Тоже вариант, но надо узнавать, как ковырять журналы аудита программно. Это время.
Если будет конкретика — будем разговаривать. Если будут посылы в Гугл, отвечу симметрично.
Считаю, что такое решение вполне имеет право на существование и представление здесь. Всё-таки не используется никакой другой инструментарий, кроме 1C. А это тоже плюс. Часто, на самом деле, для многих (меня в том числе) требуется больше времени на разработку при использовании другого инструментария (которым пользуешься редко). Замечу только, что в начале чтения сбивает с толку фраза «Для решения на компьютерах сотрудников я запускал скрипт, который создает файл в каталоге локальной VPN-сети». Лучше писать «код», а не «скрипт». Всё-таки под скриптом обычно подразумевается другое.
Читать статью вечером после всего рабочего дня тяжело, особенно если в начале статьи не отвечается на вопрос «Зачем?» Зачем заказчику это нужно было? Где-то среди комментариев проскальзывает «Речь вообще-то о контроле за работой в РИБ базах.» Но и этого мало для понимания. А хотелось бы понять. 🙂
Поддерживаю автора в том, что (выражусь своими словами, возможно с которыми автор не согласится) «говорунов-критиканов» среди прокомментировавших публикацию через чур много, хотя покамест они сами не отличились в написании более-менее добротных статей. Что ж, приходится только мириться с этим.
И наверное, название статьи лучше поменять на «Пример реализации семафоров внешними файлами для РИБ». Сухо, ясно, конкретно.
А то от названия «1С -пастырь» ждет чего-то более увлекательного, от того наверное такая резкая критика: все завлекаются названием, а получают по мордасам не всем интересными (актуальными) семафорами. 🙂
(30)
Да, название завлекательное. А дальше:
…
Для семафоров работы 1с у сотрудников я выделил в локальной сети общедоступный каталог.
(31) как корабль назовете, так он и поплывет. Программирование — дело творческое. К названию тоже нужно подходить с огоньком. Чтобы и суть отражало и запоминалось и брэндировало.
(30) Rustig, статьи на инфостарте добавляют ЧСВ, но по факту многим просто лень что-то выкладывать. На счет «пастыря» согласен, но тут уж хозяин барин.
(31) KapasMordorov, про папку и безопасность меня тоже порадовало. Не совсем понятно какое отношение безопасность имеет к нахождению пользователя за компом(о_О). Более того к нахождению пользователя в программе 1С. Т.е. если пользователя нет в 1С он нарушает какой-то регламент местной безопасности?
По поводу гугла и отсылок к аналогичному программному обеспечению, я увы не альтруист, и просто так что-либо объяснять или делать не буду. Нет желания учить что-то новое? — Пожалуйста, это Ваше дело.
«Чтобы запоминалось и брэндировало» — зачёт 😉
Идея нормальная. Пригодится для своих задач. (с)
У нас другая задача решалась, но в результате можно так же отследить кто в базе и когда вошел.
Смысл: на все базы повешена процедура при входе, создающая COM соединение с одной центральной базой.
Получая список COM соединений — видим, кто там есть.
(35)и если сетка падает, никто не может зайти в базу.
как минимум, в вашей задаче требуется хранить очередь отложенных сообщений
(33) В данном случае в программе 1с реализован дополнительный контур безопасности, для которого требуется, чтобы 1с было запущено (типо подтверждения присутствия).
Кривое решение. В случае терминального доступа ИмяКомпьютера() вернет сервер ДЛЯ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ
(37) Чебуратор, не подходи буквально. На практике я использую не имя компьютера, а код РИБ-базы (из плана обмена). Так что все пучком. Упрощение сделано для наглядности. Кроме того, в данном случае же не используется терминал, а если бы использовался, я бы нашел, как обойти решение.
(21) comol, 3 строчки кода отсылка пакета… 10 строчек обработка отсылки… ну и 3 строчки на подключение ВК… решение задачи средствами для неё предназначенными…
Хорошая идея. На карандаш
(39) ну раз все так просто — в студию!
не забудьте проверить, что фаервол не будет резать ваши пакеты.
(41) Вообще кто-то про VPN писал… надо сказать «мини эхо-сервер» гораздо более надежный и простой в плане администрирования механизм чем ftp сервер :)…
(42) comol,
да у него файервол и внутри канала работает… в противном случае Сергей всегда скажет — «а я че — я ни че, делов не знаю, я по 1с только..» 🙂
(42) даже проще чем каталог с общим доступом? 😉
строчки — в студию. покажи, как это просто. а я протестирую. гыгыгы
Можно все отслеживать по журналу регистрации, кто сколько отработал. Можно по com написать запрос к удаленным 1С-м.
(45) каталоги базы на удаленных точках закрыты из соображений безопасности, с COM обломитесь.
Анализ ЖР — это просто? бугога. К тому же это не оперативно.
(44) Ну зачем же я баяны буду разводить… люди уже не раз всё писали:http://infostart.ru/public/119982/ http://infostart.ru/public/92596/ http://infostart.ru/public/69992/
Количество строчек кода думаю оцените :).
(46)
А вот с COM+…. было бы очень даже ничегоhttp://infostart.ru/public/93643/
(5)
Специально для таких сволочей метод УстановитьКонтрольАктивности() вот отсюда 😉MiracleNative
(37)
Отправляю туда же, свойство ИмяКлиентаТерминала — реальный комп, с которого зашли в терминал.
Я бы использовал бы VBscript на каждой рабочей станции в автозагрузке, что то типа этого:
set WshShell = WScript.CreateObject(«WScript.Shell»)
KL = true
do while KL
if WshShell.AppActivate(«Microsoft Word») then
WriteWord()
KL = false
end if
WScript.Sleep 3000
loop
function WriteWord()
WshShell.SendKeys «HELLO WORLD!»
end function
Естественно «Microsoft Word», заменить на 1С8.exe А «function WriteWord()» передлать в «function SendMail()»
Письмо вообще не проблема организовать, ну таймер только вставить через сколько посылать 🙂
Sub MySendMail(recipient,msg,subject)
Dim objSession, oInbox, colMessages, oMessage, colRecipients
Set objSession = CreateObject(«MAPI.Session»)
objSession.Logon «A Valid User Profile»
Set oInbox = objSession.Inbox
Set colMessages = oInbox.Messages
Set oMessage = colMessages.Add()
Set colRecipients = oMessage.Recipients
colRecipients.Add recipient
colRecipients.Resolve
oMessage.Subject = subject
oMessage.Text = msg
oMessage.Send
objSession.Logoff
Set objSession = nothing
End Sub
Чтобы пользователи не мудрили с файлами — можно дать хитрые права на каталог, разрешив только создание но запретив запись. Чтобы не создавали файлы ручками — добавить механизм «подписи» файла — кидать туда время и сгенеренный по некому алгоритму хэш от остального содержимого (все упрется в то, моет ли пользователь узнать алгоритм генерации. но в конце концов есть шифрование модулей и вообще поставка без исходника).
Ну а лично я (если б встала задача получать пинги от удаленных 1Сок) такое бы делал через веб-сервисы — у нас же 1С8 а не 77 🙂 . Тогда бы отпали многие проблемы: с предоставлением файлового доступа; с удаленными, по HTTP работающими клиентами…
А поставить апач думаю автору/заказчику не будет проблемой.
(52) alexqc, Да, Web сервисы правильнее всего были бы.
Не, с Веб сервисами, именно в его случае, не взлетит.
(47) это инструменты. напишите на них скрипт, бояном не будет. Это вам не бла-бла. 😉
(49) у нас собственная система контроля активности, которую не обманешь.
(52) это все понятно, но это из пушки да по воробьям. 😉
(53)(54) ага, куча лишнего инсталляций и администрирования ради банальной задачки. господа, соразмеряйте средства и цели. Одно дело, если веб-сервисы уже подняты, тогда да. А если не подняты, то и ну его.
(56) Вообще web сервисы — нужен IIS и FTP сервер — нужен IIS (ну или apache и proftpd соответственно). Нужен только на сервере. ИХМО web сервер настроить проще чем ftp (не нужно квот, спец папок и т.п.). А более в чём разница не знаю…
(57) именно что ИМХО. в рамках VPN у клиента уже была расшаренная папка. Зачем добавлять гимора админу? Задачу нужно решать удобными клиенту средствами.
(58) Ну не знаю… если таким образом рассуждать этак можно и остатки на справочниках хранить. «А зачем регистры, ведь в конфигурации уже есть справочники»… «Справочники клиенту более понятны»….
(59) демагогия detected. Справочники и регистры — это однородные элементы.
Существующая VPN и необходимость поднятия, конфигурирования и администрирования нового сервера — это как бы разные вещи.
Но если даже взять вашу аналогию, то если задача клиента решается на справочниках, причем будет работать и в случае масштабирования и разработка на справочниках стоит копейки, то нафига городить с регистрами?
Хранить остатки? Это из серии — зачем нужна 1С, если есть MsSql сервер.
(61) еще один. Регистры остатков на справочниках сделать сложнее, чем изучить регистры. А использовать имеющийся шаред-каталог на порядок проще, чем заниматься веб-сервисом, который не установлен в конторе у килиента.
Подходить, господа студенты, надо не академически, а практически.
(62)
Я не про справочники vs регистры писал, я про то что нафига нужна 1С если есть отличные СУБД 🙂
(63) 1С нужна потому, что несмотря на наличие отличных СУБД, нет отличных RAD. Все RAD по сравнению с 1С — отстой.
(64)
Я вообще то имел ввиду не «зачем нужна сама 1С как система», а то что, чтобы хранить остатки можно сделать табличку в БД и с помощью запросов к БД с ними работать.
По-моему, не очень красиво работать с файликами. Если кто-то потрет файлики в шаред-каталоге? Конечно, я не знаю всех тонкостей, но база данных на сервере со временем входа/выхода в программу мне кажется предпочтительнее. Опять же, можно смотреть сведения за период.
(66) если заморачиваться, можно просто разрулить права.
(55) ну я б не сказал что пушка… WS с апачем подымаются с пол-пинка (это вам не ИИС). Раз установленный никаких телодвижений более не требует — все остальное рулится 1Ской. Плюс нативная поддержка WS — не надо заморачиваться с форматом файлов и т.п., легко расширить в случае чего (вот захочет завтра заказчик чтобы не только обмен был, но и сообщения эскам посылать — что тогда?) и для программиста более прозрачно.
(68) это вы мне рассказываете, что WS подымается с полпинка? Да тут на ИС целая инструкция как его ставить. Да еще и интернет-сервер надо подымать, если в конторе его нет, а если есть — согласовывать с его админами. Кучу телодвижений ради пшика. И потом, веб-сервисы от 1с требуют ключей доступа и лишних лицензий, оно мне надо? ЧТобы лицензии в офисе отжирались на количество пользователей на точках?
(60)
чем это они вдруг стали однородны? Что оба объекта — в 1С?
ИМХО, если уж сравнивать — справочник ближе к документу по структуре хранения. Разница — в объеме используемых таблиц.
(69)
Так и напрашивается название «1С-пластырь«.
Уж не взыщите :))
(70) избавьте меня от софистики. Если вы не различили граней, то буквоедствовать — не ко мне. 😉
(69)
WS разве требует лицензий от 1С на количество подключений?
(73) пардон, с тонким килиентом перепутал. 😉
(69) да, именно Вам, именно апач, именно с пол-пинка. Разумеется, я говорю это имея опыт и с апачем и с ИИСом.
А то что на ИС есть «инструкции» — ничего не значит, ибо все эти инструкции обычно в 3х картинках, и выглядят так:
2. Запустить инсталятор 1С — установить компонент работы с веб-сервером (если не установлен)
3. Запустить конфигуратор — выполнить публикацию.
Это не сложнее чем поднять виндовый ВПН (а там может еще с логинами/правами пое… придется) и легче чем настроить ФТП (как вы предлагали в (3) ), о чем уже говорилось.
(75) вот оно надо, получать опыт секса с апачем, если задача решается родными средствами 1с?
а ведь апач еще потом и админить надо, это не зиро-админинг систем.
(76) хм, вроде выразился понятно… Ну ладно, повторюсь — секс это как раз с ВПН: это там может потребуется настройка прав и раздача логинов; а апач в базовой/минимальной установке и есть «зеро-аминингс». Т.к. апач базово настроен на только отдачу каталога-сайта, практически все модули выключены, и ничего больше он сделать не может. Тем и хорош — с одной стороны, безопасен (все отключено), с другой — функцонал достаточен (при публикации конфигуратор сам пропишет загрузку модуля и пути к каталогу), с третьей — администрирование можно возложить на плечи 1С.
ЗЫ. Вы вообще со связкой 1С8+веб работали? По вашей категоричности виден явно негативный опыт, или некая предубежденность. Если я прав, предлагаю всеж еще поэкспериментировать — уверен, В/С вам понравятся.
(77) вы вообще осознаете, что вы пишите.
ВНП — это данная нам в ощущениях необходимость. Она и без 1с будет поднята.
А веб-сервис от 1с — это рюшечки, нафиг клиенту не нужные. Зачем ему доплачивать админу?
Со связкой 1с + веб-сервис я работал и апач поднимал. Там, где это нужно, это полезно, но не надо из пушки да по воробушкам…
Дико, извините за скабрезность, «угорел» от ответов комментаторов и автора)
Ну а по существу, как вам вариант с отправкой статусов по email? Все необходимые средства есть, пишется в пару строчек, плюс немного кода на центральной базе для чтения inbox от удаленных баз.