Рабочее место "Уборщик"




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

45 Comments

  1. Torin

    Без бутылки ( хоть ее и выпил) не разобратся + ШРИФТЫ подчеркивают уникальность

    Reply
  2. anig99

    надоела однообразность дизайна 1с В последний год начали исправляться иконками, хотя как-то долго. Но вот дизайн 8.2… я ещё не пользовался 8.2, но он уже надоел. Данное обработкой пользуюсь постоянно, поэтому хотелось чего-то другого.

    Если что-то не понятно задавайте вопросы

    Reply
  3. anig99

    (1) а вообще поллитра нужно закусывать гномским пирогом…хотя это не оттуда, да и закусывать им вредно для зубов. Тогда поллитру нужно употреблять за компанию с Бифуром, Бофуром, Бомбуром, Нори, Глоином, Дори и Ори, а еще с Фигли и Мигли…

    Reply
  4. Арчибальд

    (2) Апологеты серого на сером тебя заклевать попытаются. Но не бойся, я с тобой 😉

    Reply
  5. Ish_2

    (4) Не слушай Арчибальда . Он- «зеленый».

    Серьезные мужчины используют серое на сером.

    И разукрашки не используют.

    Reply
  6. Шёпот теней

    … anig99 как всегДА фундаментален …. присоединяюсь к Арчибальду в (4) …

    … ВОТ …

    п.с. хочется заметить что всё таки хотелось бы простых и понятных решений … как пример ВалерычЪ с его : http://infostart.ru/public/16241/ или http://infostart.ru/public/21715/ … и др …

    выражаю мнение, что 1С слишком универсальна и вследствии этого неповоротлива … и если идти у неё на поводу то никакой фундаментальности не хватит т.к. «1С много» а «программиста» сопровождающего 1С очень мало … вот …

    Reply
  7. madmpro

    А что за РабочееМестоМедвеева? Пасхальное яйцо?

    Reply
  8. madmpro

    А что за РабочееМестоМедведева? Пасхальное яйцо?

    Reply
  9. anig99

    (7) Фамилиё моё такое…

    Reply
  10. Alraune

    Отличная и очень нужная вещь, спасибо! Вчера опробовала, работает (на УПП 1.2.23.2).

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

    Reply
  11. anig99

    (10) По ордерам. В управленческом учете — да, а в бухгалтерском — нет.

    По поводу версий…Зависимость от версии УПП только для обработки проведения по учетам.

    Reply
  12. Alraune

    (11) Тогда все понятно. У нас в УПП вообще документы по бухучету не проводятся, поэтому и разницы нет)))

    Reply
  13. Traas

    Два раза пытался скачать — скачивается файл «РАБОЧЕЕ» а что ЭТО — не понятно, как архив система не распознает. как обработку тоже.

    Автору: — либо файл поправь, либо укажи какое потом расширение ставить.

    Reply
  14. anig99

    (13) глюки у Вас с броузером…

    При заливке всегда проверяю. Сейчас ещё раз проверил. Всё нормально качает.

    Расширение epf

    Reply
  15. Traas

    (14) Качал FireFox. Попробовал IE — cкачал нормально.

    Reply
  16. anig99

    Завтра оттестирую дополнение к старому и новый способ проверки счет-фактур. Если всё будет ок, то обновлю.

    Reply
  17. artbear

    (0) «Основано на http://www.infostart.ru/public/19052/»

    Это 2 разные/параллельные обработки или сабж — это расширение основы, и основа более не нужна?

    Reply
  18. anig99

    (18) Нет…Данная обработка выросла из той. Но в связи с большими изменениями в коде, алгоритмах, вызове типовых функций и добавлении нового функционала (ещё несколько скрытых штук недоработано или неоттестировано) вынесено в отдельную обработку с другим названием.

    Reply
  19. Boroda444

    Ошибка при выполнении файловой операции ‘C:Documents and SettingsDSKРабочий столРабочее место Медведева.epf’

    по причине:

    Неверный формат хранилища данных ‘file://C:/Documents and SettingsDSKРабочий столРабочее место Медведева.epf’

    Что это? даже в конфе не открывает

    Reply
  20. anig99

    (20) Хз…первый раз такое вижу (: Скорее всего файл не до конца скачался.

    Reply
  21. husky

    для УПП 8.2 будет работать?

    Почему во всех периодах устанавливается дата 01.01.2011 — 01.01.2011 ?

    Reply
  22. anig99

    (22) это дата ограничения изменения данных. Защита, чтобы случайно не начать проводить не тот период. Можно снять ограничение изменив обработку, или нажать кнопку на панели дополнительно Пароль «Можно менять»

    Reply
  23. anig99

    (22) на УПП 8.2 1.3 работает

    Reply
  24. husky

    {Форма.Форма.Форма(1325)}: Значение не является значением объектного типа (Измерения)

    Если МетаДанные.НайтиПоПолномуИмени(«РегистрНакопления.»+ИсточникПров).Измерения.Найти(«Организация»)=Неопределено Тогда

    Reply
  25. anig99

    (25) Ошибка касается пункта

    «Проведение движения конкретного товара». Там есть несколько пунктов в виде переключателей, которые определяют проверяемые регистры. Название регистра хранится в ВыбираемоеЗначение конкретного переключателя.

    Скорее всего такая ошибка вылезла при выборе Партии НУ. Там неправильно стоит Выбираемое значение. Должно стоять ПартииТоваровНаСкладахНалоговыйУчет

    Reply
  26. Fialka88

    а что файл уже не активный …. скачиваю просто пустой документ даже расширения нет (((

    Reply
  27. Fialka88

    Очень жаль (((

    Reply
  28. anig99

    (28) всё скачивается

    Reply
  29. Fialka88

    (29)

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

    Reply
  30. anig99

    (30) это вопросы к браузеру.

    Reply
  31. Fialka88

    у меня их три и везде одно и то же (((

    Reply
  32. sb007

    пробовал на УПП для Укарины (1.3.12.6). Честно говоря не впечатлило.То ли конфа наша сильно доработана напильником, то ли лыжи не едут.Проверка на отрицательные остатки и еще что-то отработало конечно, но в целом не порадовала.Хотя делать универсальные проверки с нашим каждый день меняющимся законодательством и релизами конфигураций-дело неблагодарное.

    Reply
  33. natnat3

    (34) serg-wws, присоединяюсь.

    Спасибо

    Reply
  34. firevii

    Будет ли работать на переписанной УПП 1.2.38.11 ? Сильно писанной, переписанной.

    Reply
  35. anig99

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

    Reply
  36. firevii

    Большое! Просто ОГРОМНОЕ СПАСИБО! Применил для восстановления по сч.62.01 62.02, бухгалтера просто плачут от счастья. Так как уже были настроены восстанавливать руками с января 2011 (из-за умелых ручек некоторых «недобухгалтеров»)

    Reply
  37. selen

    Спасибо. Очень помогла.

    Reply
  38. itt

    жаль что не для УТ, а так отличная обработка

    Reply
  39. higs

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

    Reply
  40. sumixam

    Данная обработка работает для 1.3.39.1?

    Reply
  41. anig99

    (42) должна. но не проверял. своя-то версия этой обработки работает.

    Reply
  42. pereligins

    Так что на счёт УПП 1.3, работает на ней?

    Reply
  43. anig99

    (44) должно работать. У меня работает немного другая версия (учитывая доработки), но вызов типовых процедур я не менял и всё, что я обычно использую до сих пор работает (УПП 1.3.42.1)

    Reply
  44. PtizaPtiza

    Скажите, а для УТ нет подобной?

    Reply
  45. vis_tmp

    Спасибо автору, интересная обработка.

    Reply

Leave a Comment

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