Погодка. Информер для Бухгалтерии 3.0 [Расширение]




Принцип обмена данными из 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='\

32 Comments

  1. ben_art

    {Справочник.ИдентификаторыОбъектовМетаданных.МодульМенеджера(2750)}: При выполнении операции над расширением «ПогодкаРасширениеДляБухгалтерии30» возникла ошибка:

    Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено.

    Ошибка блокировки объекта. Объект уже заблокирован:

    компьютер: user_77-ПК, пользователь: art, сеанс: 25303, начат: 10.03.2016 в 13:48:49, приложение: Конфигуратор

    Убедитесь, что все расширения закрыты в конфигураторе.

    ВызватьИсключение ТекстОшибки;

    Reply
  2. infosoft-v

    (1) ben_art, попробуйте закрыть конфигуратор и запустить конфигурацию в режиме Предприятия.

    Reply
  3. ben_art

    т.е при открытом конфигураторе и расширении в нем не будет работать ? Другие то работают..

    Reply
  4. infosoft-v

    (3) ben_art, Войдите один раз в конфигурацию с установленным расширением в режиме предприятия и выполните рекомендации пункта 4 из этой публикации: Расширения конфигурации. Полезные советы для разработки

    Reply
  5. ben_art

    (4) Спасибо

    Reply
  6. ben_art

    теперь новая ошибка

    11.03.2016 14:35:25 Работа с Yandex. Не удалось получить данные с http://export.yandex.ru/weather-ng/forecasts/27612.xml по причине 001-Исключение при вызове метода HTTP соединение

    Reply
  7. infosoft-v

    Сегодня погода Яндекса как то странно себя ведёт. Отвечает через раз. Вот картинка с попыткой открыть ваш прогноз в браузере.

    Давайте понаблюдаем до конца дня. Потом буду думать, что делать.

    Reply
  8. shibanovan

    Прикольно. Качаю. А давайте и курс валют сюда же ?

    Reply
  9. shibanovan

    Хм. Проблема Возникла.

    Функция ОтправитьЗапросGET хттпзапрос завершается с ошибкой

    «Ошибка работы с Интернет: Server returned nothing (no headers, no data)»

    Во вложении сделал скриншот с таблом

    Reply
  10. shibanovan

    Моя ситуация идентична (6)

    Reply
  11. infosoft-v

    (9) shibanovan, спасибо за обратную связь. Буду разбираться.

    Reply
  12. infosoft-v

    (8) shibanovan, я об этом думал. В следующей версии постараюсь добавить.

    Reply
  13. shibanovan

    Ещё новости по городу организации можно выводить )) Да, тема интересная )

    Reply
  14. infosoft-v

    (10) shibanovan, коллега, похоже проблема на стороне Яндекса. Нашёл обсуждение в комментариях подобной проблемы http://seo-zona.ru/informer-pogody-delaem-sami-2015-06-06.html Судя по датам подобные проблемы у людей начались в то же время что и у нас. Думаю нужно дать пару дней на стабилизацию и после сделать вывод и принять решение.

    Reply
  15. infosoft-v

    (6) ben_art, коллега, посмотрите ответ 14. Подождём пару дней.

    Reply
  16. shibanovan

    Похоже, проблема осталась ?

    Reply
  17. infosoft-v

    (16) shibanovan, да, к сожалению.

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

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

    Reply
  18. webresurs

    Где найти «дополнительные сведения справочника «Организации»» для добавления ИДГородаДляИнформераПогоды ?

    ) Отключено было в Администратирование — Общие настройки

    Как правильно добавить Дополнительное значение в Тип значения — что выбрать?

    Число, Строка, Дополнительное значение и т.п.

    Полагаю с изменением поставщика погоды foreca на Meteum изменился и адрес

    с «http://export.yandex.ru/weather-ng/forecasts/%1.xml» на ???

    извиняюсь через анонимайзер(из украины) открывает , а на прямую нет…

    )) Заблокировали по географическому признаку для Россиян фига, а украинцам пож… редиски Яндекс разработчики

    Reply
  19. infosoft-v

    (18) webresurs, Дополнительное сведение добавляется расширением самостоятельно при первом запуске, но на всякий случай, дополнительное сведение это строка.

    Полагаю с изменением поставщика погоды foreca на Meteum изменился и адрес

    с «http://export.yandex.ru/weather-ng/forecasts/%1.xml» на ???

    извиняюсь через анонимайзер(из украины) открывает , а на прямую нет…

    )) Заблокировали по географическому признаку для Россиян фига, а украинцам пож… редиски Яндекс разработчики

    Я не знал таких подробностей. Спасибо. Подумаю, что можно сделать. Я правильно понимаю, что Украина продолжает надёжно получать данные с «http://export.yandex.ru/weather-ng/forecasts/%1.xml»?

    Я сейчас разрабатываю версию 1_02 и там будет два провайдера прогноза погоды. Так что можно будет выбрать работающий.

    Reply
  20. webresurs

    (19)

    — строка не добавилась, но появились пустые или разбитые строки, так как название компани -ООО «компания имя разделено» — и в кавычках

    — открывал через cameleo ru — а там по украинский, прокси полагаю разные…

    Может можно как то привязать через анонимайзер?

    (http:/mv4ha33soq.pfqw4zdfpaxhe5i.cmle.ru/weather-ng/forecasts /%1.xml)

    — будем ждать…1.02

    Reply
  21. webresurs

    Идея- количество сообщений на Почте.Яндекс или любой другой с переходом, открытием в браузер

    Или через Встроенный браузер 1с или тут Браузер для 1С 8.2 (обычная и управляемая форма)

    А тут описано как с РБК курс валют забирать

    😉

    Reply
  22. infosoft-v

    (21) webresurs, спасибо, идеи это классно. У меня сильно развяжутся руки на платформе 8.3.9 http://v8.1c.ru/o7/201603module/index.htm Тогда информер можно не втискивать в рамки одной строки а разместить в отдельной секции на жёлтом квадрате.

    Reply
  23. infosoft-v

    (20) webresurs,

    — строка не добавилась, но появились пустые или разбитые строки, так как название компани -ООО «компания имя разделено» — и в кавычках

    Проверьте: Администрирование — Общие настройки — Дополнительные сведения Должно быть как на картинке: https://yadi.sk/i/-DOnVQIXqktaE

    А в карточке организации должно быть так: https://yadi.sk/i/mJx4msBFqktkc

    Reply
  24. webresurs

    (23)

    — Да так же, перепробовал все варианты, число, строка и т.п., но если браузер не видит, то и не чее маяться!

    … вот что ответили разработчики Яшки

    «Сервис export.yandex.ru существует сугубо для собственных продуктов и сервисов Яндекса и наших официальных партнеров. Он может в любой момент меняться или быть отключен. За всеми публичными API и технологиями, пожалуйста, обращайтесь на ресурс tech.yandex.ru.

    «
    Reply
  25. ben_art

    Маленькое предложение.

    Было бы лучше видеть погоду не только на завтра

    Reply
  26. infosoft-v

    (25) ben_art, спасибо за предложение.

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

    Reply
  27. Тайрин

    Здравствуйте.

    Установила погодку в расширения и вышла ошибка после перезапуска программы: «Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)». Погодка не работает.

    1С:Предприятие 8.3 (8.3.8.1652)

    Бухгалтерия предприятия, редакция 3.0 (3.0.43.223)

    Reply
  28. infosoft-v

    (27) Тайрин, спасибо за сообщение об ошибке. Я поправлю расширение и дам вам знать.

    Reply
  29. infosoft-v

    (27)(25)(24)(16)(6) Информация от 27/05/2016:

    канал получения погоды export.yandex.ru компанией Яндекс полностью закрыт.

    Расширение «Погодка 1.01» больше не работает.

    Работа над расширением «Погодка 2.01» начата.

    Всем хорошего дня и хорошей погодки.

    Reply
  30. Fantasisto

    (29) Что там с Погодкой 2.01?)

    Reply
  31. infosoft-v

    (30) Версия 2.0 выпущена https://infostart.ru/public/801039/ работает на OpenWeatherMap

    2.1 будет, если Яндекс даст доступ к своему API

    Reply
  32. Fantasisto

    (31) Уже скачал, спасибо)

    Reply

Leave a Comment

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