<?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)>Или здесь просто такое предвзятое отношение к платным разработкам?
А ты сомневался? :)))))))))))))
Хорошая работа. Открыл для себя несколько новых параметров.
Параметр /UC <Код доступа> используется и для режима конфигуратора.
(4) Спасибо. Для платформы 8.1 описание всех параметров есть в справке, не так наглядно конечно, но всё же ) Собственно, оттуда и взял ) К обработке прилагается практически полная база параметров, за исключением 2 — 3-х, которые не совсем вписываются в логику работы программы.
Для себя создавал подобную, не настолько красивую и универсальную конечно, но есть возможность в одном скрипте запускать последовательно несколько команд (в т.ч. для разных ИБ) и добавлять суфикс _год_месяц_день для файлов вывода сообщений и выгрузок. Это Вам идея для дальнейшего развития проекта 🙂
З.Ы. еще б скрыть пароль пользователя за звездочками и исключить его из строки соединения ИБ.
(6) Скрыть-то пароль не сложно, но всё же подразумевается что только администратор пользуется обработкой, а уж в скрипте, даже продвинутому юзеру пароль не увидеть… Впрочем, сделаю, если минутка будет )
+(7) Насчет нескольких команд в скрипте, не очень-то представляю как это вписать именно в эту обработку, сохранив простоту и наглядность…
Хорошая работа, особенно понравилась реализация проверки на количество запусков в «ДЕМО» версии (Функция ПолучитьТекущийЗапуск()). 🙂
(9) Спасибо ) Пользуйтесь на здоровье )
Разработка — просто СУПЕР!!! Огромное спасибо
Молодец. Тоже хотел такую писать, но раз уж ты написал, то плюсы достаются тебе. Так держать!
Ну перетаскивание хотя бы можно было сделать, а то как то неудобно даже.
(13) Будет тебе перетаскивание )
Добавил перетаскивание между «Доступными параметрами» и «Выбранными параметрами», действительно, работать стало гораздо удобнее. Спасибо tormozit за идею!
Объявляется бесплатная раздача! Всех желающих прошу оставлять мейл в комментах.
на халяву уксус сладкий
21c#rambler#ru
Кодер, спам-лист собираешь? 😉
(18) Да, от обработки прибыль не большая, буду базу спамерам сливать… )))
(17) хых, tango, тебе скидывать не буду! ) Вон же лежит полная версия для др. авторов! Халявщик, блин!… )
за (16) ответишь
О пля, увидел у тебя как копировать в буфер! Давно искал.
Добавь возможность создания пакетного файла
(22) Ну вот видишь ) Иногда стоит посмотреть подобные вещи…
У меня скрипт вместо пакетного файла, по сути одно и тоже, тока дату не умеет в имя файла вставлять )
Я имел ввиду возможность выполнять одним скриптом несколько командных строк.
А твою разработку я уже видел, но она называлась по-другому «МастерПараметровКоманднойСтроки». Я от туда взял идею получения списка баз, сделал список более удобным.
Можешь взять мой код 🙂
Скрипт тоже хотел прикрутить только ради шифрования, но пока нет времени
(24) а-а-а, это старая версия, под 8.0… )
А этот параметр отстутствует в XML почему то
/LoadCfg<имя cf файла> (для базовых версий не используется) загрузка конфигурации из файла
Или может я не там ищу?
(27) Да, действительно как-то пропустил… 🙂 Спасибо, теперь есть.
ЗЫ: А вообще, как раз для таких случаев я и делал встроенный редактор базы параметров… 🙂
вопросик, может по теме?
А можно запустиь пакетно, удаление объектов?
Если да поясните как?
(29) Нет. Таких ключей запуска нет.
сам придумал как выкрутиться))))
На ИТС есть обрабока по удалению помеченных объектов. Молех ее рихтуем.
И после делается ее пакетный запуск.))))
Несмотря на то, что все параметры описаны в справке, визуально составлять строку гораздо удобнее. За это плюс
(31) Отличный вариант, ключ для автозапуска обработки имеется.
(32) Да, мне самому эта обработка нравится больше всех прочих, размещенных мной здесь… 🙂
очень спасибо
Какая удобная вещь, можно мне тоже на мэйл, пожалуйста. Tazar sobaka bk to4ka ru. Заранее спасибо большое.
Для версии 7.7 ищем по ключевому слову ParamGen
(35) Ушло.
А можно еще и со мной поделиться? iceflame@yandex.ru Заранее огромное спасибо
(38) Ушло.
можно и мне vip914@meta.ua
(40) Ушло.
grag-net@ya.ru
Спасибо заранее)
(42) Отправил.
А мне тоже можно? sem-evgen@rambler.ru
Заранее спасибо.
(44) отправил.
а мне тоже пжлста можно? ))) kazakovakaterina@mail.ru Заранее спасибо
поддержу разработку! отправьте плиз на intimatik(гав-гав)mail.ru
(46),(47) отправил
мне тоже, если можно отправьте пожалуйста 🙂
ayanchevsky()yahoo.com
(49) ушло.
Ой и мне очнь интересно 🙂 скиньте пожалуйста dimdmitry()mail,ru
(51) Отныне здесьhttp://nashe1c.ru/materials-view.jsp?id=112 осуществляется бесплатная раздача.
Отличная разработка, спасибо.
По ходу ознакомления столкнулся со следующей ситуацией — скачанную обработку и файл параметров сохранил во временную папку; понравилось — решил перенести в папку с прочими обработками. В результате после переноса обработка не находит файл по сохраненному во время прошлого запуска пути и не дает перевыбрать.
Поправил таким образом (процедура ПриОткрытии() главной формы):
…
Если Файл.Существует() Тогда
РазборФайлаПараметров(ФайлПараметров,ДоступныеПараметры);
Иначе
ТекстВопроса = «Файл параметров по пути «»» + ФайлПараметров + «»» не найден. Очистить путь?»;
Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да) = КодВозвратаДиалога.Да Тогда
ФайлПараметров = «»;
КонецЕсли;
КонецЕсли;
(53) Спасибо. Внес Ваше исправление в релиз.
bujin2006@mail.ru
Хорошая вещь, спасибо. Только одно смутило: почему нельзя в режиме конфигуратора указать параметр /Out для вывода Файла служебных сообщений? В зашифрованный скрипт вручную не вставить 🙁
При тестировании очень полезный параметр.
(57) Хм… А я думал /Out имеет смысл только для режима «Предприятие» 🙂
А как же Редактор параметров? Кто мешает тебе добавить параметр /Out и в ветку DESIGNER?… 🙂
(58) Ага, точно можно, не заметил 🙂 Жаль, что в этом режиме скопировать нельзя, напрямую в XML быстрее можно сделать простым копированием.
Еще пожелание: Можно придумать сохранение созданных настроек, чтоб можно было ранее созданную командную строку отредактировать, а не набирать заново?
(59) Сделать-то можно, но с разбором командной строки в обратном направлении прийдется повозиться… Сейчас пока нету ни времени, ни желания (если честно).
(60) А если через СохранитьНастройки? (ВосстановитьНастройки)
При многократном копировании в буфер валится с ошибкой.
Нашел другой работающий код:
oIE = new COMОбъект(«InternetExplorer.Application»);
oIE.navigate («about:blank»);
oIE.visible = 0;
Пока oIE.Busy Цикл
КонецЦикла;
oIE.Document.parentWindow.clipboardData.setData («Text», КоманднаяСтрока );
oIE.Quit();
Чтобы не возникал вопрос у IE нужно изменить настройки безопасности.
(62) Не стал бы я называть такой код работающим… )
(63) Не работает? Может в настройках безопасности не разрешена работа с буфером?
(64) Почему «может»? ) Точно не разрешена! )) А включить не могу — прав нет. Именно по этой причине я отказался, в свое время, от такого варианта работы с буфером обмена.
Можно и мне тоже?
babylon5()gala.net
(66) Добавил ссылку на бесплатную раздачу в шапку. И вообще, читаем внимательно комменты )
(67) Сорри, не заметил. 🙂 Три часа ночи было…
А можно обработку без ограничений на nsviv@mail.ru
Плиз
Хорошая софтина
DesignerCommandLine
(69) Замучился я уже скидывать! )
ОТНЫНЕ РАЗРАБОТКА ПОЛНОСТЬЮ БЕСПЛАТНА
у меня что-то зашифрованный не создается скрипт на серваке 2003,
а как можно сделать чтоб дата к имени файла выгрузки формировалась?
(76) возможно какие-то политики безопасности запрещают запуск утилиты, которая непосредственно шифрует скрипт…
С датой в имени файла есть похожие разработки на сайте, воспользуйтесь поиском!
да не я просто думал может есть какие ключи или способы чтоб к имени файла при выгрузки прибавляли дату, как в winrar, например.
Спасибо. Как раз искал подобную вещь
сайт глючит ужасно: с 8-00 не могу никак сюда достучаться 🙁
Кодер, да уж, ты АС!!!
Я пока что слабо ориентируюсь в здешней среде, и для себя намотал на ус пока что только несколько Авторитеов: tormozit, German, coder1c8, AbaDonna (хех, как же мне нравиться этот женский ник у этого парня! 🙂 ).
Простите, до остальных гигантов я пока еще не добрался, ну не все же сразу, ознакомлюсь потихоньку и со всеми остальными. Кстати мне еще очень нравился Гений1С и куда он пропал?
Отвлекся, по теме: Лепотаааа! как говорил Иван Васильевич.
Спасибо за обработку, как раз для изучения новичку вроде меня, а то мне к tormozit’у и к German’у с их навороченными монстрами пока что рано, они ужас как далеки, а мой Путь в 1С только начат, но я их взял за ориентир 🙂
Ой пока достучался до сайта (4 часа) и забыл зачем пришел 🙂
Вот мал-мал заметка:
в ф-ии ДоступностьДобавления()
если нет родителя, то ты грозно не добавляешь строку с подчиненными ключами.
Имхо, я бы позволил добавление детей, но перед их добавлением, насильно бы прописал и вставил бы им родителя, если он пока еще не зарегистрирован.
ай задолбался я уже обновлять свой пост когда он упорно нифига не обновляется 🙂
обновляется только когда вставляешь новый пост, а не правишь старый
Но, спасибо Иришка (Alraune), благодаря тебе, я теперь знаю как обновляться, хе-хе!
И жизнь сразу веселее стала! Как мало программисту для радости надо!!! Чтобы прога работала сегодня, пусть и с ошибками, но главное, чтобы они мне сегодня на глаза не попались, и всего лишь одно доброе словечко, простой совет, от симпатичной девушки! 🙂
Ах да, вспомнил!
Кодер, вот еще что я хотел спросить: а почему такие заморочки с копированием текста в буфер обмена (даже MSensey отметился по этому пункту, как затруднительному для него, так что чего уж мне то тут стесняться, хех!)
А зачем копировать -то через IE ?..
А что действительно в 1С нет метода напрямую отправить текст в Windows ClipBoard?
Или же я чего то не знаю (а я пока что, скажем честно и прямо, почти ничего не знаю в 1С), или же я чего то не догоняю?..
ах, да ладно, замнем эту тему, извините, автор, что зря Вас побеспокоил 🙂
мне ведь тоже некогда писать налево, как и Вам.
А пока что приходится отдуваться за троих что в отпуске 🙂
Но скоро ведь и мне в отпуск — в сентябре, вот. Давно, почитай год как не был на своей родной Брестчине.
Спасибо за обработку и за внимание, и, ради бога, извините за многословность и, не примите за назойливость.
И, спасибо, не надо мне отвечать — я и сам разберусь когда время свободное выпадет.
Счастья, удачи и успехов Вам!
И ласковых улыбок встречных, от девушек 🙂
Удобно, быстро и практично! Спасибо!
Большое спасибо! Обработка очень помогла
Спасибо, иногда приходится сталкиваться с такой задачей, и все тяжело в голове держать, проще вот такой обработкой.
отличный конструктор!
Спасибо. Отличная обработка!
Спасибо. Очень удобная вещь. У нас как раз на предприятие все работы через планировщик задач.
Отличная работа. Удобно и не надо по книжкам лазить. Большое спасибо.
+1 Отлично
Использую до сих пор
Новые ключи добавили?
/Z<Общий реквизит 1>,<Общий реквизит 2>,…,<Общий реквизит N> — установка разделителей.
<Общий реквизит> = [<+>|<->]<значение общего реквизита>
[<+>|<->] — признак использования: «+» (по умолчанию) — реквизит используется; «-» — не используется;
Если разделитель не используется, то перед значением должен быть «-«. Если первым символом в значении разделителя содержится символ «+» или «-«, то при указании его нужно удваивать.
<значение общего реквизита> — значение общего реквизита. Если в значении разделителя присутствует запятая, то при указании ее нужно удваивать. Если значение разделителя пропущено, но разделитель должен использоваться, то используется символ «+».
Разделители разделяются запятой.
Например:
«/Z-ПервыйРазделитель,+,—ТретийРазделитель», что означает:
Первый разделитель выключен, значение – «ПервыйРазделитель»,
Второй разделитель включен, значение – пустая строка,
Третий разделитель выключен, значение – «-ТретийРазделитель».
/itdi – режим интерфейса с использованием закладок.
/isdi – режим интерфейса с использованием отдельных окон (используется по умолчанию).
обработка хорошая, помогла
Классная вещь, способная сэкономить кучу времени если ее толково использовать.
Всё это хорошо, но как сделать проверку физической целостности одним щелчком? Есть у chdbfl.exe параметры?
А почему тогда цена висит?
Ой, простите, затупил =)
Инфостарт не даёт бесплатно скачать.
Денег требует.
Буду весьма признателен, если скинете обработку
на мой адрес zastep@mail.ru