Конструктор параметров командной строки




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

95 Comments

  1. Legavaz

    Великопно выполненная работа, большое спасибо.

    Reply
  2. coder1cv8

    (1) Пожалуйста. ) А то меня уже настораживает отсутствие каких бы то ни было отзывов… )

    Или здесь просто такое предвзятое отношение к платным разработкам? Так цена чисто символическая, да и для других разработчиков абсолютно бесплатно.

    Reply
  3. Abadonna

    (2)>Или здесь просто такое предвзятое отношение к платным разработкам?

    А ты сомневался? :)))))))))))))

    Reply
  4. Sergey.Noskov

    Хорошая работа. Открыл для себя несколько новых параметров.

    Параметр /UC <Код доступа> используется и для режима конфигуратора.

    Reply
  5. coder1cv8

    (4) Спасибо. Для платформы 8.1 описание всех параметров есть в справке, не так наглядно конечно, но всё же ) Собственно, оттуда и взял ) К обработке прилагается практически полная база параметров, за исключением 2 — 3-х, которые не совсем вписываются в логику работы программы.

    Reply
  6. Sergey.Noskov

    Для себя создавал подобную, не настолько красивую и универсальную конечно, но есть возможность в одном скрипте запускать последовательно несколько команд (в т.ч. для разных ИБ) и добавлять суфикс _год_месяц_день для файлов вывода сообщений и выгрузок. Это Вам идея для дальнейшего развития проекта 🙂

    З.Ы. еще б скрыть пароль пользователя за звездочками и исключить его из строки соединения ИБ.

    Reply
  7. coder1cv8

    (6) Скрыть-то пароль не сложно, но всё же подразумевается что только администратор пользуется обработкой, а уж в скрипте, даже продвинутому юзеру пароль не увидеть… Впрочем, сделаю, если минутка будет )

    Reply
  8. coder1cv8

    +(7) Насчет нескольких команд в скрипте, не очень-то представляю как это вписать именно в эту обработку, сохранив простоту и наглядность…

    Reply
  9. Asdam

    Хорошая работа, особенно понравилась реализация проверки на количество запусков в «ДЕМО» версии (Функция ПолучитьТекущийЗапуск()). 🙂

    Reply
  10. coder1cv8

    (9) Спасибо ) Пользуйтесь на здоровье )

    Reply
  11. alexcne

    Разработка — просто СУПЕР!!! Огромное спасибо

    Reply
  12. tormozit

    Молодец. Тоже хотел такую писать, но раз уж ты написал, то плюсы достаются тебе. Так держать!

    Reply
  13. tormozit

    Ну перетаскивание хотя бы можно было сделать, а то как то неудобно даже.

    Reply
  14. coder1cv8

    (13) Будет тебе перетаскивание )

    Reply
  15. coder1cv8

    Добавил перетаскивание между «Доступными параметрами» и «Выбранными параметрами», действительно, работать стало гораздо удобнее. Спасибо tormozit за идею!

    Reply
  16. coder1cv8

    Объявляется бесплатная раздача! Всех желающих прошу оставлять мейл в комментах.

    Reply
  17. tango

    на халяву уксус сладкий

    21c#rambler#ru

    Reply
  18. JohnyDeath

    Кодер, спам-лист собираешь? 😉

    Reply
  19. coder1cv8

    (18) Да, от обработки прибыль не большая, буду базу спамерам сливать… )))

    Reply
  20. coder1cv8

    (17) хых, tango, тебе скидывать не буду! ) Вон же лежит полная версия для др. авторов! Халявщик, блин!… )

    Reply
  21. tango

    за (16) ответишь

    Reply
  22. MSensey

    О пля, увидел у тебя как копировать в буфер! Давно искал.

    Добавь возможность создания пакетного файла

    Reply
  23. coder1cv8

    (22) Ну вот видишь ) Иногда стоит посмотреть подобные вещи…

    У меня скрипт вместо пакетного файла, по сути одно и тоже, тока дату не умеет в имя файла вставлять )

    Reply
  24. MSensey

    Я имел ввиду возможность выполнять одним скриптом несколько командных строк.

    А твою разработку я уже видел, но она называлась по-другому «МастерПараметровКоманднойСтроки». Я от туда взял идею получения списка баз, сделал список более удобным.

    Можешь взять мой код 🙂

    Reply
  25. MSensey

    Скрипт тоже хотел прикрутить только ради шифрования, но пока нет времени

    Reply
  26. coder1cv8

    (24) а-а-а, это старая версия, под 8.0… )

    Reply
  27. tormozit

    А этот параметр отстутствует в XML почему то

    /LoadCfg<имя cf файла> (для базовых версий не используется) загрузка конфигурации из файла

    Или может я не там ищу?

    Reply
  28. coder1cv8

    (27) Да, действительно как-то пропустил… 🙂 Спасибо, теперь есть.

    ЗЫ: А вообще, как раз для таких случаев я и делал встроенный редактор базы параметров… 🙂

    Reply
  29. Константин С.

    вопросик, может по теме?

    А можно запустиь пакетно, удаление объектов?

    Если да поясните как?

    Reply
  30. coder1cv8

    (29) Нет. Таких ключей запуска нет.

    Reply
  31. Константин С.

    сам придумал как выкрутиться))))

    На ИТС есть обрабока по удалению помеченных объектов. Молех ее рихтуем.

    И после делается ее пакетный запуск.))))

    Reply
  32. Lyekka

    Несмотря на то, что все параметры описаны в справке, визуально составлять строку гораздо удобнее. За это плюс

    Reply
  33. coder1cv8

    (31) Отличный вариант, ключ для автозапуска обработки имеется.

    (32) Да, мне самому эта обработка нравится больше всех прочих, размещенных мной здесь… 🙂

    Reply
  34. sdkard

    очень спасибо

    Reply
  35. Talim

    Какая удобная вещь, можно мне тоже на мэйл, пожалуйста. Tazar sobaka bk to4ka ru. Заранее спасибо большое.

    Reply
  36. CheBurator

    Для версии 7.7 ищем по ключевому слову ParamGen

    Reply
  37. coder1cv8

    (35) Ушло.

    Reply
  38. iv

    А можно еще и со мной поделиться? iceflame@yandex.ru Заранее огромное спасибо

    Reply
  39. coder1cv8

    (38) Ушло.

    Reply
  40. vip914

    можно и мне vip914@meta.ua

    Reply
  41. coder1cv8

    (40) Ушло.

    Reply
  42. inse0f

    grag-net@ya.ru

    Спасибо заранее)

    Reply
  43. coder1cv8

    (42) Отправил.

    Reply
  44. sem-evgen

    А мне тоже можно? sem-evgen@rambler.ru

    Заранее спасибо.

    Reply
  45. coder1cv8

    (44) отправил.

    Reply
  46. katya

    а мне тоже пжлста можно? ))) kazakovakaterina@mail.ru Заранее спасибо

    Reply
  47. Intimatik

    поддержу разработку! отправьте плиз на intimatik(гав-гав)mail.ru

    Reply
  48. coder1cv8

    (46),(47) отправил

    Reply
  49. Gavri1a

    мне тоже, если можно отправьте пожалуйста 🙂

    ayanchevsky()yahoo.com

    Reply
  50. coder1cv8

    (49) ушло.

    Reply
  51. dimdmitry

    Ой и мне очнь интересно 🙂 скиньте пожалуйста dimdmitry()mail,ru

    Reply
  52. coder1cv8

    (51) Отныне здесь http://nashe1c.ru/materials-view.jsp?id=112 осуществляется бесплатная раздача.

    Reply
  53. andrewkon

    Отличная разработка, спасибо.

    По ходу ознакомления столкнулся со следующей ситуацией — скачанную обработку и файл параметров сохранил во временную папку; понравилось — решил перенести в папку с прочими обработками. В результате после переноса обработка не находит файл по сохраненному во время прошлого запуска пути и не дает перевыбрать.

    Поправил таким образом (процедура ПриОткрытии() главной формы):



    Если Файл.Существует() Тогда

    РазборФайлаПараметров(ФайлПараметров,ДоступныеПараметры);

    Иначе

    ТекстВопроса = «Файл параметров по пути «»» + ФайлПараметров + «»» не найден. Очистить путь?»;

    Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да) = КодВозвратаДиалога.Да Тогда

    ФайлПараметров = «»;

    КонецЕсли;

    КонецЕсли;

    Reply
  54. coder1cv8

    (53) Спасибо. Внес Ваше исправление в релиз.

    Reply
  55. Александр4023512
  56. lion11

    Хорошая вещь, спасибо. Только одно смутило: почему нельзя в режиме конфигуратора указать параметр /Out для вывода Файла служебных сообщений? В зашифрованный скрипт вручную не вставить 🙁

    При тестировании очень полезный параметр.

    Reply
  57. coder1cv8

    (57) Хм… А я думал /Out имеет смысл только для режима «Предприятие» 🙂

    А как же Редактор параметров? Кто мешает тебе добавить параметр /Out и в ветку DESIGNER?… 🙂

    Reply
  58. lion11

    (58) Ага, точно можно, не заметил 🙂 Жаль, что в этом режиме скопировать нельзя, напрямую в XML быстрее можно сделать простым копированием.

    Еще пожелание: Можно придумать сохранение созданных настроек, чтоб можно было ранее созданную командную строку отредактировать, а не набирать заново?

    Reply
  59. coder1cv8

    (59) Сделать-то можно, но с разбором командной строки в обратном направлении прийдется повозиться… Сейчас пока нету ни времени, ни желания (если честно).

    Reply
  60. lion11

    (60) А если через СохранитьНастройки? (ВосстановитьНастройки)

    Reply
  61. MSensey

    При многократном копировании в буфер валится с ошибкой.

    Нашел другой работающий код:

    oIE = new COMОбъект(«InternetExplorer.Application»);

    oIE.navigate («about:blank»);

    oIE.visible = 0;

    Пока oIE.Busy Цикл

    КонецЦикла;

    oIE.Document.parentWindow.clipboardData.setData («Text», КоманднаяСтрока );

    oIE.Quit();

    Чтобы не возникал вопрос у IE нужно изменить настройки безопасности.

    Reply
  62. coder1cv8

    (62) Не стал бы я называть такой код работающим… )

    Reply
  63. MSensey

    (63) Не работает? Может в настройках безопасности не разрешена работа с буфером?

    Reply
  64. coder1cv8

    (64) Почему «может»? ) Точно не разрешена! )) А включить не могу — прав нет. Именно по этой причине я отказался, в свое время, от такого варианта работы с буфером обмена.

    Reply
  65. babylon_5

    Можно и мне тоже?

    babylon5()gala.net

    Reply
  66. coder1cv8

    (66) Добавил ссылку на бесплатную раздачу в шапку. И вообще, читаем внимательно комменты )

    Reply
  67. babylon_5

    (67) Сорри, не заметил. 🙂 Три часа ночи было…

    Reply
  68. Dinara78

    А можно обработку без ограничений на nsviv@mail.ru

    Плиз

    Reply
  69. Dicar

    Хорошая софтина

    Reply
  70. Dicar

    DesignerCommandLine

    Reply
  71. coder1cv8

    (69) Замучился я уже скидывать! )

    ОТНЫНЕ РАЗРАБОТКА ПОЛНОСТЬЮ БЕСПЛАТНА

    Reply
  72. Just

    у меня что-то зашифрованный не создается скрипт на серваке 2003,

    а как можно сделать чтоб дата к имени файла выгрузки формировалась?

    Reply
  73. coder1cv8

    (76) возможно какие-то политики безопасности запрещают запуск утилиты, которая непосредственно шифрует скрипт…

    С датой в имени файла есть похожие разработки на сайте, воспользуйтесь поиском!

    Reply
  74. Just

    да не я просто думал может есть какие ключи или способы чтоб к имени файла при выгрузки прибавляли дату, как в winrar, например.

    Reply
  75. Mortal

    Спасибо. Как раз искал подобную вещь

    Reply
  76. Збянтэжаны Саўка

    сайт глючит ужасно: с 8-00 не могу никак сюда достучаться 🙁

    Кодер, да уж, ты АС!!!

    Я пока что слабо ориентируюсь в здешней среде, и для себя намотал на ус пока что только несколько Авторитеов: tormozit, German, coder1c8, AbaDonna (хех, как же мне нравиться этот женский ник у этого парня! 🙂 ).

    Простите, до остальных гигантов я пока еще не добрался, ну не все же сразу, ознакомлюсь потихоньку и со всеми остальными. Кстати мне еще очень нравился Гений1С и куда он пропал?

    Отвлекся, по теме: Лепотаааа! как говорил Иван Васильевич.

    Спасибо за обработку, как раз для изучения новичку вроде меня, а то мне к tormozit’у и к German’у с их навороченными монстрами пока что рано, они ужас как далеки, а мой Путь в 1С только начат, но я их взял за ориентир 🙂

    Reply
  77. Збянтэжаны Саўка

    Ой пока достучался до сайта (4 часа) и забыл зачем пришел 🙂

    Вот мал-мал заметка:

    в ф-ии ДоступностьДобавления()

    если нет родителя, то ты грозно не добавляешь строку с подчиненными ключами.

    Имхо, я бы позволил добавление детей, но перед их добавлением, насильно бы прописал и вставил бы им родителя, если он пока еще не зарегистрирован.

    Reply
  78. Збянтэжаны Саўка

    ай задолбался я уже обновлять свой пост когда он упорно нифига не обновляется 🙂

    обновляется только когда вставляешь новый пост, а не правишь старый

    Но, спасибо Иришка (Alraune), благодаря тебе, я теперь знаю как обновляться, хе-хе!

    И жизнь сразу веселее стала! Как мало программисту для радости надо!!! Чтобы прога работала сегодня, пусть и с ошибками, но главное, чтобы они мне сегодня на глаза не попались, и всего лишь одно доброе словечко, простой совет, от симпатичной девушки! 🙂

    Reply
  79. Збянтэжаны Саўка

    Ах да, вспомнил!

    Кодер, вот еще что я хотел спросить: а почему такие заморочки с копированием текста в буфер обмена (даже MSensey отметился по этому пункту, как затруднительному для него, так что чего уж мне то тут стесняться, хех!)

    А зачем копировать -то через IE ?..

    А что действительно в 1С нет метода напрямую отправить текст в Windows ClipBoard?

    Или же я чего то не знаю (а я пока что, скажем честно и прямо, почти ничего не знаю в 1С), или же я чего то не догоняю?..

    Reply
  80. Збянтэжаны Саўка

    ах, да ладно, замнем эту тему, извините, автор, что зря Вас побеспокоил 🙂

    мне ведь тоже некогда писать налево, как и Вам.

    А пока что приходится отдуваться за троих что в отпуске 🙂

    Но скоро ведь и мне в отпуск — в сентябре, вот. Давно, почитай год как не был на своей родной Брестчине.

    Спасибо за обработку и за внимание, и, ради бога, извините за многословность и, не примите за назойливость.

    И, спасибо, не надо мне отвечать — я и сам разберусь когда время свободное выпадет.

    Счастья, удачи и успехов Вам!

    И ласковых улыбок встречных, от девушек 🙂

    Reply
  81. lemonadze

    Удобно, быстро и практично! Спасибо!

    Reply
  82. quarion

    Большое спасибо! Обработка очень помогла

    Reply
  83. GreenFox

    Спасибо, иногда приходится сталкиваться с такой задачей, и все тяжело в голове держать, проще вот такой обработкой.

    Reply
  84. baza1978

    отличный конструктор!

    Reply
  85. courageous

    Спасибо. Отличная обработка!

    Reply
  86. redwonder87

    Спасибо. Очень удобная вещь. У нас как раз на предприятие все работы через планировщик задач.

    Reply
  87. kladovoy

    Отличная работа. Удобно и не надо по книжкам лазить. Большое спасибо.

    Reply
  88. Casey Jones

    +1 Отлично

    Reply
  89. Smoke221180

    Использую до сих пор

    Reply
  90. Alav

    Новые ключи добавили?

    /Z<Общий реквизит 1>,<Общий реквизит 2>,…,<Общий реквизит N> — установка разделителей.

    <Общий реквизит> = [<+>|<->]<значение общего реквизита>

    [<+>|<->] — признак использования: «+» (по умолчанию) — реквизит используется; «-» — не используется;

    Если разделитель не используется, то перед значением должен быть «-«. Если первым символом в значении разделителя содержится символ «+» или «-«, то при указании его нужно удваивать.

    <значение общего реквизита> — значение общего реквизита. Если в значении разделителя присутствует запятая, то при указании ее нужно удваивать. Если значение разделителя пропущено, но разделитель должен использоваться, то используется символ «+».

    Разделители разделяются запятой.

    Например:

    «/Z-ПервыйРазделитель,+,—ТретийРазделитель», что означает:

    Первый разделитель выключен, значение – «ПервыйРазделитель»,

    Второй разделитель включен, значение – пустая строка,

    Третий разделитель выключен, значение – «-ТретийРазделитель».

    /itdi – режим интерфейса с использованием закладок.

    /isdi – режим интерфейса с использованием отдельных окон (используется по умолчанию).

    Reply
  91. alex_asoft

    обработка хорошая, помогла

    Reply
  92. Mshaydurov

    Классная вещь, способная сэкономить кучу времени если ее толково использовать.

    Reply
  93. Yury1001

    Всё это хорошо, но как сделать проверку физической целостности одним щелчком? Есть у chdbfl.exe параметры?

    Reply
  94. SeiOkami
    С 15.05.2009 РАЗРАБОТКА ПОЛНОСТЬЮ БЕСПЛАТНА

    А почему тогда цена висит?

    Ой, простите, затупил =)

    Reply
  95. zastep

    Инфостарт не даёт бесплатно скачать.

    Денег требует.

    Буду весьма признателен, если скинете обработку

    на мой адрес zastep@mail.ru

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *