Афоризмы 1С 8.1




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

22 Comments

  1. Tatitutu

    Автор ! Я же Вам в личку написал. Не убрали

    у Вас двоится — зачем повторятся http://infostart.ru/projects/5060/?

    Reply
  2. an77

    Сорри, уже убрал.

    Reply
  3. WiseSnake

    Хотел уже плюсик влепить, но открыл код… Мдя…

    Пока основной вопрос ЗАЧЕМ было все афоризмы в код писать??? можно внешний файл использовать с базой, можно его в макеты запихнуть… и т.д. и т.п….

    P.S. Только не говорите, что вы их руками писали в код, а то у меня истерика приключится…

    Reply
  4. Re:аниматор

    подобное решение делал на 7 ке еще в 2004 году, при старте программы выдавался афоризм, внешний файл, можно коллекцию данную взять:

    http://1c.proclub.ru/modules/mydownloads/personal.php?cid=106&lid=3416

    Reply
  5. nikitan

    (3) Это просто «индийский код» дабы взорвать мозг пытающимся повторить сие творение…

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

    Reply
  6. an77

    (3) Обработка — из раннего творчества, прописал в код, чтобы пользователи не наткнулись на справочник или регистр, или программеры не могли просто вытянуть афоризмы; кроме того мобильно — все в одной обработке. Пользователь теряет при открытии несколько десятых долей секунды, которые 100% окупаются.

    P.S. Не могу допустить истерики уважаемого WiseSnake 🙂

    Исходники афоризмов были текстовые, собрал в Excel код для модуля (минут десять-пятнадцать) и вставил. Если интересно, могу рассказать, как. А вот от чего истерика может приключится, так это от СОЛО 8!

    Reply
  7. WiseSnake

    (6) За уважаемого премного благодарен, но пока не достиг этого уровня, можно просто «царь» )))) (шутка юмора)…

    Я в течении 10 минут вытащу все афоризмы обратно в Ексель или dbf или по заказу… )))

    >> Если интересно, могу рассказать, как.

    Неее, спасибо, не надо это и так видно, по коду. Про руки, это я тоже ради шутки спросил…

    > кроме того мобильно — все в одной обработке

    «Запихните» в макет, не парьтесь. Нормальный программер вытянет ка два пальца об асфальт, а вот обновлять афоризмы в таком виде это… беее…

    P.S. А что такое соло 8?

    Reply
  8. scream

    спасибо

    Reply
  9. Akela

    соло 8 — клавиатурный мастурбатор

    Reply
  10. Tatitutu

    (9) Выбирайте выражение и не флудите в форуме.

    «СОЛО на клавиатуре» — это обучающая программа, позволяющая в короткий срок научиться быстро печатать на клавиатуре компьютера.

    Клавиатурный тренажер — http://ergosolo.ru/ Лучшей программы для обучения печати в слепую я не встречал. Сам прошел (скорость печати 362 знака в минуту) и всем друзья всегда советую.

    Reply
  11. artmicro

    Прикольная штука, к недостаткам кода можно еще отнести мега формулу для определения случайного числа )) Вы же написали «1С: Предприятие 8.1», а про то что в 8.1 есть свой генератор случайных чисел не знаете 🙂

    Но плюсик все таки заслужили.

    Reply
  12. an77

    (11) Знаем, пытались. Только при новом открытии формы число повторяется 🙁

    Reply
  13. artmicro

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

    Reply
  14. sir

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

    to WiseSnake коли вы «такой умный» то на лету обновить базу хоть из корзины не должно быть проблемой при необходимости :)))

    Reply
  15. WiseSnake

    to Sir я не умный, я тока учусь… часто ловлю себя на мысли «какой же я тупой». Ну это можно объяснить замечательной фразами «Умным считает себя только настоящий дурак» (с) или «Я знаю, что я ничего не знаю» (с).

    А по сути вопроса Вы просто не разобрались как я предлагал сделать! Ничего не надо за базой таскать… Коли Вы «такой умный» чего же критикуете не разобравшись в вопросе?

    >на лету обновить базу хоть из корзины не должно быть проблемой при необходимости :)))

    Даже не представляю о чем Вы…Что за корзина? На каком лету?

    Reply
  16. an77

    ВСЕМ.

    Если кто использует данную наработочку в реальной базе, напишите пжлста, как воспринимают пользователи. Очень интересно (все — таки разные коллективы бывают 🙂

    Reply
  17. Aleanza

    Не ну это точно нужно быть «гением», чтобы все афоризмы в код засунуть.

    Reply
  18. crs

    Надо сделать кнопку: «Еще …» и чтоб афоризм можно было скопировать в буфер обмена, чтоб послать по аське. А вообще афоризмы неудачные, сильно умные: «Когда грустишь в одиночку, зеркало усиливает одиночество». Какое тут расслабление?

    Reply
  19. usparts@inbox.ru

    Сори за оффтоп

    (10)

    Вместо Соло лучше сайт http://www.klavogonki.ru )) Гораздо быстрее можно научиться ))) И интересней. Там развил скорость до 550 зн в минуту 😉

    Reply
  20. blindcat2006

    причесал…

    Reply
  21. simuljakr

    (16)

    У меня похожая обработка выводится при закрытии программы.

    Только вместо афоризмов выдает хокку.

    Все довольны 🙂

    Когда одному пользователю админ отключил обработку — тот даже возмущаться начал: «Где мое хокку!!»

    Reply
  22. Mraidyn

    При открытии ошибка 😮

    {Форма.Форма(11)}: Ошибка при вызове метода контекста (Область): Область не найдена: R4 774C1

    ЗнВСтр1=МакетХранения.Область(Адрес1).Текст;

    по причине:

    Область не найдена: R4 774C1

    Reply

Leave a Comment

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