Шаблоны для конфигуратора 8.х ( от 03.03.2012 )




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

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

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

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

57 Comments

  1. d.snissarenko

    Супер!

    Правда пришлось залезть в жжк и поглядеть каким сочетанием клавиш это дело робит :))) — Ctrl+Q

    Супер…

    Reply
  2. NDM

    (1), можно и так. Но удобнее включить режим Автозамены, как показано на скриншотах, тогда все происходит но нажатию enter, природно! 😀

    Reply
  3. break

    внимание, грамматика -«Причем этот код оформлен в одном стиле, что УЛУЧАЕТ читабельность». /А так замечательно, у меня только дискомфорт вызывает то, что в окне выбора шаблона рядом в скобках пишется путь к шаблону, где это отключить?

    Reply
  4. kirillkr

    (0) Прошу разрешение на добавление в открытое хранилище

    http://github.com/Kirill/template1c

    Reply
  5. wirg

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

    Reply
  6. NDM

    (4) kirillkr — да разрешение даю, только автора не забудьте указать 😉

    Reply
  7. NDM

    (5) в шаблон включен код исключительно отлаженный и проверенный в реальных задачах.

    Reply
  8. NDM

    (3) Окно выбора шаблона появляется, если правило срабатывает для нескольких шаблонов одновременно, у меня в настройках файлов шаблонов всегда стоит один мой шаблон. Стандартный и все другие если есть, я убираю см. Шаблоны_подключение_1.png

    Reply
  9. artbear

    С аргументацией не совсем согласен, но за шаблон плюс !

    Reply
  10. artbear

    (0) Могу предложить свою довольно удобную конструкцию для отладочной печати Отладка

    Сообщить(«<?»Введите переменную»> = <«+?(<?»Введите переменную»> = Неопределено, «Неопределено», <?»Введите переменную»>)+»>»);<?>

    у меня сидит на отл[адка]

    Reply
  11. Широкий

    Блин .. а я уже привык все руками набирать 🙂

    Reply
  12. NDM

    (10) Взял на заметку.

    Reply
  13. strange2007

    (0)

    1 — Задумайтесь почему амеры вбухивают миллионы в ни кому не нужную «мозговую деятельность»?

    2 — Попробуйте хотя бы с недельку поработать с теми, кто сначала продумает/запишет/зарисует, наметит план и обозначит сроки и Вы увидите, что как раз 5000 строк будет быстрее написать не Вашим методом

    3 — Сначала были шаблоны. Потом программисты начали рассматривать создание приложений с объектной стороны.

    В общем, даже не знаю куда это применять. Честно

    Reply
  14. artmicro

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

    Reply
  15. NDM

    (13) А инталисайнс и стандартные шаблоны у Вас отключены?

    Именно сейчас на 100% кодеры НЕ ЛАМЕРЫ используют целые готовые библиотеки, скрипты и куски кода, дабы не изобретать велосипед, не наступать на грабли, которые успешно уже кто-то обошел, это конечно другой уроверь, но идея та же что и у шаблонов. Хотел бы я посмотреть на web-кодера который каждому клиенту пишет CMS с нуля 😀 за 250$

    Reply
  16. strange2007

    (15) А еще некоторые собирают все в двоичные библиотеки и т.д. и т.п. Я и имел в виду, что между просто шаблонами и объектным представлением появилась четкая грань. Библиотеку уже не изменишь на «раз-два». У библиотек уже имеется вход, выход, а у продвинутых прослеживаются и управляющее воздействие и интерфейсы для инструментов. Это уже другой уровень абстракции, хотя выглядеть они могут одинаково.

    Reply
  17. strange2007

    (15) Тем более стандартные шаблоны. Вы о чем вообще???? Стандартные, это то, от чего отталкиваться. Если на то пошло, тогда ассемблеристы любую ДЛЛ смогут разобрать как захочется и переделать совсем по другому.

    Reply
  18. NDM

    (16) Язык 1С не объектный, Ваша аргументация мне не понятна, шаблоны это шаблоны, объекты это объекты, инструменты это инструменты, ассемблер это СТИЛЬ ЖИЗНИ, у каждого механизма строго свое назначение. Здесь я предлагаю использовать шаблоны 1С 8, для избавления от рутинных операций набора кода. Экономя на наборе кода, дает возможность сосредотачиваться на более важных вещах.

    Если Вы не используете механизм шаблонов в 1С это Ваше право, других механизмов в ней нет.

    Reply
  19. sergsqr

    огромное спасибо!

    Reply
  20. CheBurator

    это чего? типа телепата в 7.7?

    Reply
  21. artbear

    (20) Нет, это типа обычного шаблона в 7.7 🙁

    Reply
  22. v.l.

    (0) Файл не найден или удален. Скиньте в личку, если его «низзя» показывать.

    Reply
  23. NDM

    (22) Был сбой на сайте, сейчас все хорошо, попробуйте еще раз.

    Reply
  24. v.l.

    (23) спасибо, получилось

    Reply
  25. artbear

    (23) Сослался на сабж в своей публикации http://www.infostart.ru/public/65526

    Reply
  26. NDM

    (25) ок

    Reply
  27. Поручик

    (26)

    В варианте для 8.2. «Объекты метаданных» в разделе Запросы. Это так задумано?

    Reply
  28. NDM

    (27) Да так задумано, для ручного указания в запросах источников данных ИЗ <Объекты метаданных> или для ЗНАЧЕНИЕ( <Объекты метаданных> )

    Reply
  29. Abadonna

    (20) Ты чего, Чебуратор? Я ж тебе высылал шаблоны к 7.7 и по твоей просьбе к CompoundExplorer их приделывал. Склероз? 😉

    Reply
  30. CheBurator

    (29) спакуха, к7.7 да, а вот про КомпаундИксПлорир — склероз.. Но компаундИксплорер использую ипизодически

    Reply
  31. CheBurator

    Еще бы автор написал как эти шаблоны устанавливать… Спрашивается — вот для кого эта разработка…? у мастеров — своих наработок стопудово есть? а для новичков-ламеров — хрен знает куда это копировать и где подключать…

    Reply
  32. Поручик

    Принцип простой — умный поймёт, а дураку и не надо. (с)

    Не понимаю, какким же дятло-ламером надо быть, чтобы не подключить шаблон. 😀

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

    Спасибо за шаблоны.

    В шаблоне Development8x.st мал-мал описька 🙂

    Reply
  34. Lyolik

    Для начинающих очень полезная наработка. Большое спасибо.

    Reply
  35. dyh

    есть интересные экземплярчики

    забираю к себе 😀

    Reply
  36. Alexey55

    Спасибо! Очень удобная вещь!

    Reply
  37. Beta

    подскажите, первый раз выложила обработку, публикацию долго держат на модерации?

    Reply
  38. bulas

    Шаблоны текста и их разнообразие — это нормально, когда начинаешь. В целях экономии времени на написание кода. А вот шаблоны прикладных решений — это перелопатить ИнфоСтарт, систематизировать и сделать БлокПрикладныхРешений — это следующая ступень. Для конструкторов типа Лего: сконструировал блок схему своей задачи и сиди подбирай «комплектующие» в этом Блоке.

    Reply
  39. dem_mad

    Спасибо!

    Reply
  40. artbear

    Автор, напомни, в чем различия между файлами Development8x.st и Development8.1 и Development8.2 ?

    Reply
  41. NDM

    (40) artbear,

    В Development8x.st — включены конструкции и Development8.1 и Development8.2 без дублирования.

    Reply
  42. Vond

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

    Reply
  43. gorneev

    Супер!, работает все, кодить очень удобно!!!

    Reply
  44. Konsult

    Спасибо, очень хороший и полный шаблон.

    Reply
  45. kr_andr

    Спасибо

    Reply
  46. Гость

    Спасибо. Мне, начинающему программисту пригодится очень.

    Reply
  47. feit

    Спасибо! Очень удобно, позволяет сократить затрачиваемое время, да и ошибок в спешке меньше делать.

    Reply
  48. BalVlad

    Спасибо, удобно и меньше затрат времени. Ставлю +

    Reply
  49. OrsoBear

    Спасибо! Очень выручают такие штуки.

    приходится кодить все больше и больше.

    Скорость надо наращивать.

    Такие вещи очень помогают.

    Еще раз спасибо!

    Reply
  50. Sergey447

    Спасибо

    Reply
  51. khaoos

    Благодарю. Буду осваивать. Сразу вопрос по блоку «Комментарии». Откуда должно браться значение переменной «ПолноеИмяПользователя»? У меня пустое. Буду признателен за ответ.

    Добавлено: все, увидел, видимо, первая попавшаяся конфигурация без пользователей оказалась.

    Reply
  52. dim9

    Удобно, экономит время. Ставлю +

    Reply
  53. vitaliyua

    А существуют ли переменные, которые бы «брали» название модуля, в котором срабатывает автозамена, для использования в самом тексте шаблона?

    Reply
  54. orefkov

    (54) это уже снегопат нужен.

    Reply
  55. V_V_V

    Уже несколько лет пользуюсь шаблонами Чистова, за что ему отдельное спасибо. Смотрю тут некоторые конструкции совпадают. Показалось? 🙂

    Хотя этот набор само-собой значительно больше. Теперь спасибо автору! 🙂

    P.S.

    orefkov (файл скачал) — тебе-то он зачем??? 🙂

    Reply
  56. AlexO

    (56) V_V_V,

    Уже несколько лет пользуюсь шаблонами Чистова, за что ему отдельное спасибо. Смотрю тут некоторые конструкции совпадают. Показалось?

    NDM и не скрывал никогда, что часть шаблонов Чистова перекочевала сюда.

    Reply
  57. m-aziat

    Давненько уже скачал и пока тестировал так привык, что уже на автомате использовал. Начал делать перестановки на компе и случайно пофиксил шаблон. Тут сразу и вспомнил надо подцепить шаблон. А автору спасибо и респект!!!

    Reply

Leave a Comment

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