Форматированная строка




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

29 Comments

  1. Sasha255n

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

    Reply
  2. holostyak

    (1) Sasha255n,

    Клиенты хотели, чтобы в предупреждениях ключевые слова отображались цветом (ошибка — красные, НЕошибка — синие).

    И таких предупреждений куча.

    Копировать и корректировать для каждого — я ещё в уме, чтобы этого не делать!

    Вот и родилось решение

    Reply
  3. WKBAPKA

    тю, в 8.2 не работает )

    Reply
  4. Поручик

    (3) Кто сказал, что ФорматированнаяСтрока для 8.2?

    Reply
  5. holostyak

    (4) Поручик, Платформа: 1С: Предприятие 8.3

    Reply
  6. holostyak

    (3) WKBAPKA, Платформа: 1С: Предприятие 8.3

    Reply
  7. Поручик

    (6) А мне-то вы зачем говорите. Я и так давно знаю.

    Reply
  8. holostyak

    (7) Поручик, Я думал, что это вопрос мне )))

    Reply
  9. WKBAPKA

    на 8.3. тоже не взлетело


    Ошибка инициализации модуля: Форма.Форма.Форма

    по причине:

    {Форма.Форма.Форма(27,20)}: Переменная не определена (СтроковыеФункцииКлиентСервер)

    МассивБлоков = <<?>>СтроковыеФункцииКлиентСервер.РазложитьСтр
    Reply
  10. WKBAPKA

    (10)


    Рубрики : Практика программирования

    Тип: Статья

    Платформа: 1С: Предприятие 8.3

    Конфигурация: Не имеет значения

    Операционная система: Windows

    Страна: Россия

    использую Демонстрационная конфигурация «Управляемое приложение» для 8.3.

    И в этой конфигурации я такого СТАНДАРТНОГО модуля почему то не нашел!

    И вообще, если каждую разработку что бы ее оценить, нужно проверять по коду, то к чему этот цирк? или пишите, в каких конфигурациях ее можно использовать и что она не работает автономно, а только в составе некоторых типовых конфигураций!

    Reply
  11. holostyak

    (11) WKBAPKA, Цирк — это ваши «прицепочки». только вы один задались вопросом что такое «СтроковыеФункцииКлиентСервер».

    Создавая публикацию было указано, что она «не претендует на уникальность» и «делалась для себя».

    Если вам лень (а скорее вы просто не знаете типовых процедур!) — ГУГЛ вам в помощь.

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

    Есть ещё у вас вопросы?

    Reply
  12. holostyak

    (11) WKBAPKA,

    Демонстрационная конфигурация — показывает некоторые приемы, а не ВСЕ ВОЗМОЖНОСТИ

    Для этого есть БИБЛИОТЕКА СТАНДАРТНЫХ ПОДСИСТЕМ

    Reply
  13. WKBAPKA

    WKBAPKA, Если вы не знакомы с стандартными процедурами 1С — ваша беда..)))

    СтроковыеФункцииКлиентСервер — это общий модуль.

    есть свой способ разложить строку в массив — пользуйтесь им (перепишите в в коде этот пункт) ))

    напоминаю с чего все началось…

    а все остальное это явно перебор.


    Форматированная строка.

    Пример работы параметрами с форматированной строкой.

    Функция не претендует на универсальность, но вдруг кому пригодится.

    Есть мысли как улучшить (для себя реализую!)

    Для простых строк вполне может подойти

    где тут «для себя», «не претендует на уникальность»?

    и покажите мне, где я задал вопрос

    что такое «СтроковыеФункцииКлиентСервер».

    Внимательно перечитайте пост №9.

    А вообще да, вы гуру 1С, а я тут так себе иногда подрабатываю, там ИТС установить комуто… студент одним словом!

    Reply
  14. holostyak

    (14) WKBAPKA,

    Ну вот вы сами себя на место и поставили

    Reply
  15. WKBAPKA

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

    Reply
  16. holostyak

    (16) WKBAPKA,

    Уважаемый.. а где тут «на личности»?

    И перед чем я должен оправдываться? перед вашей несообразительностью (простиТЕ!)

    Не нравится — до свиданья.. зачем вы тут?

    Reply
  17. WKBAPKA

    обычно я очень толерантный к людям… но вы молодой человек однозначно ХАМЛО… сначала вы усомнились в моих знаниях в 1С — похоже вы так долго программируете, а возможно обладаете Х-фактором в этой области, что все остальные тут ничтожны перед вашим умищем… уж кто то, а вы уж точно знаете все стандартные функции 1С… ну это и не мудрено, ведь это дано только избранным… естественно, таким божественным как вы… сам Нуралиев приходит ночью в ваши сны и посылает импульсы знаний в ваше умище… не то что наши жалкие умишки…

    потом вы тупо начали меня троллить… я нигде ничего плохого не написал по поводу вашей публикации, даже, о боже, как я мог, поставил плюс… когда просто написал, что не работает, вместо того что бы просто написать, что имеет смысл проверять на типовых конфигураций, вы меня просто обосрали… не знаю как у вас там в великой и могучей, а у нас тут у мелких хохлов из типовых конфигураций на платформе 1С:Предприятие 8.3. только есть Демонстрационная конфигурация. А проводить эксперименты с конвертациями типовых конфигураций в 8.3, что бы посмотреть в работе творение не признанного ГЕНИЯ , который не удосужился нужную функцию скопировать в свою обработку в модуль объекта, и тупо хамит, как то не особенно хотелось… то ли он не ГЕНИЙ вовсе, то ли творение так себе!

    Reply
  18. tango

    (12)

    только вы один задались вопросом что такое «СтроковыеФункцииКлиентСервер».

    да ну? вы пишите как читаете?

    Reply
  19. tango
    ВСЕ ВОЗМОЖНОСТИ

    Для этого есть БИБЛИОТЕКА СТАНДАРТНЫХ ПОДСИСТЕМ

    аффтар!!!!! пеши чащее!

    Reply
  20. tango

    (18) WKBAPKA, остыньТЕ, коллега 🙂

    оно не здесь и не сейчас 🙂

    тс в начале топика самого поручега локотком зацепил — и ничего 🙂

    Reply
  21. tango

    в целом тс заслуживает

    все задатки для карьеры во фране

    Reply
  22. WKBAPKA

    (22) tango,

    да я особо и не нервничал 🙂 я против ТС ничего не имею. но ТС должен делать различия между «прицепочками» и замечаниями… а не сразу в штыки… ведь его никто не просил публиковать свою разработку. Раз он это сделал, значит он надеется на одобрение со стороны сообщества в виде +. Но почему то не понимает, что далеко не каждый будет перебивать конфигурации на новой платформе, что бы посмотреть на чудо творения. Вместо того что бы написать в каких конфигурациях или на худой конец взять эту злосчастную функцию выдернуть из типовой и запилить в модуль объекта так что бы обработка имела самодостаточность, он начал тут брызгать слюной на лево и на право.

    Честное слово, логики не понимаю…

    я кстати такую штуку еще на 8.1. хотел запилить. Но убогенько смотрелось в табличном документе 🙁

    Reply
  23. holostyak

    (24) WKBAPKA,

    хреново хотели, батенька

    Reply
  24. tango

    (25) в приличном обществе за результаты теста если не платят, то благодарят

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

    ваш подход еще более невменяем

    Reply
  25. holostyak

    (27) tango, вам я ни чем не обязан и сюда не приглашал даже…

    Reply
  26. WKBAPKA

    ахахах… я потрясен

    Reply
  27. holostyak

    (31) WKBAPKA, что вам ещё остается…

    Reply
  28. tango

    (30) вас кто-то пригласил на ИС?

    **

    зря спросил, конечно. у вас ведь и интернет уже крякнутый

    Reply
  29. tango

    (34) ты не понимаешь. это очень важно — ты, твои публикации, мысли обо всем и отношение ко мне

    Reply

Leave a Comment

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