Анекдот про 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='\

28 Comments

  1. motyashov

    Еще анекдот про бухгалтера:

    Главбух сидит в своем кабинете и пьет водку. Тут же об этом факте стуканули директору. Директор пошел выяснять ситуацию.

    — Что ж ты МарьИвановна водку хлещешь на рабочем месте?

    — А что, не нравится?

    — Не особо.

    — Хорошо. (достает бутылку красного вина) Сторнируем красненьким.

    Reply
  2. gutentag

    (1) вам это надо опубликовать как «самостоятельная тема» 🙂

    Reply
  3. Noy

    (2) ага, давайте тут башорг устроим…

    Reply
  4. Altair777

    (0) (2)

    Это что — новый виток плюсомании?

    Имейте совесть, такие короткие анекдотики — на форум http://infostart.ru/forum/forum1/

    Reply
  5. vasilykushnir

    (4) А ты пожалуй прав… Все в сад!

    Reply
  6. biv75

    Анекдот про аудитора они меня больше всего раздражают

    Пастух пасет стадо овец на обочине дороги. Рядом притормаживает новенький джип-Чероки. Из джипа выходит молодой человек в костюме от Бриони, туфлях от Черрути, очках Ray-Ban, галстуке от YSL и спрашивает пастуха:

    — Давай, если я угадаю сколько у тебя овец в стаде, ты мне одну отдашь?

    Пастух подумал и согласился.

    Молодой человек припарковывает машину, подсоединяет ноутбук и мобильник, заходит на сайт NASA, сканирует картинку с пастбищем через GPS, открывает базу в Excel, распечатывает отчет на 150 страницах на крутом мини-принтере, затем поворачивается к пастуху и говорит:

    — У тебя здесь ровно 1568 овец.

    Пастух подтверждает:

    — Точно.

    Молодой человек берет то, что ему причитается и загружает в багажник. Тут пастух говорит:

    — Давай, я угадаю, где ты работаешь, а ты за это вернешь мою овцу?

    — Ну, давай, — соглашается молодой человек.

    — Ты работаешь аудитором, — говорит пастух

    — Точно, а как ты догадался?

    — Ну, это элементарно — во-первых, ты явился без предупреждения, во-вторых, мне пришлось тебе заплатить овцой за то, что я и без тебя знал, и в третьих, ты ничего не понимаешь в том, что я делаю — ты положил в багажник мою собаку

    Reply
  7. Malaya1971

    Про аудитора — жесть! Супер!

    Reply
  8. biv75

    Жизненый ))) Как я их… люблю…, а они как от меня в восторге )))) убили бы если могли

    Reply
  9. IP43

    Про аудитора не в бровь, а в глаз 🙂

    Reply
  10. IP43

    немного не в тему, но тоже прикольно, рассказали в ответ на вышеизложенные.

    Разговор из аськи:

    <юра> Вчера был в одной крупной конторе, там самый крутой админ

    <Cruel> Unix-гуру?

    <юра> Не знаю, я не об этом. Выглядит он классически: джинсы, свитер, очки. Стоим с ним в коридоре, разговариваем. Идет мимо солидная дама, мне: «Здрасьте», а его хвать за жопу. Он ей: «В лоб получишь»

    <юра> Продолжаем разговаривать. Идет дядька. Мне: «Здравствуйте», ему: «Привет, Санек!». Он ему: «Когда блять сотню вернешь?»

    <юра> Потом оказалось: дама — главбух, дядька — гендиректор…

    Reply
  11. IP43

    (10) Если заменить крутой админ на 1С-ника, то будет более реалистичнее 🙂

    Reply
  12. sbv2005

    Бухгалтер программисту 1С:

    — Построй мне сальдо по счету …

    — Вам какое: дебетовое или кредитовое?

    — Ты что, дурак! Сальдо не можешь построить!!!

    Reply
  13. Ксакеп

    1С 3001 года.

    Программист (П) : Хочу готовую конфигурацию.

    Конструктор конфигураций (К): Готово.

    П: Хочу чтобы работало.

    К: Выполнено.

    П: Распечатай мануал.

    К: Сделано.

    П: Рассчитай и отправь заказчику сумму контракта.

    К: Неопознаный оператор.

    П: Отправь багрепорт в 1С.

    К: Модуль отправки баг-репорта не входить в стандартную комплектацию.

    Reply
  14. simuljakr

    (0) А я такой же слышал, только про «квест Зарплата и Кадры», и там лирический герой «на отпусках срезался» 🙂

    Reply
  15. Фред

    (6) Хорошо, когда аудитор не в обязаловку!!

    Reply
  16. АлексейН

    Про аудитора КЛАСССС!!!

    Что верно то верно

    Reply
  17. sbr

    Хочу присоединиться к анекдоту про аудитора.

    ДА, ДА, ДА — так и есть

    Reply
  18. gigagr

    Про аудитора КЛАССССно!!! А вот про сисадмина:

    Cо слов юзера:

    «Не включается компьютер — зову админа.

    Админ приходит, воздевает руки к небу, бормочет про себя невнятные слова, поворачивает мой стул 10 раз вокруг свой оси, пинает компьютер — тот начинает работать. Вновь воздевает руки к небу, что-то бормочет, уходит »

    Cо слов Админа:

    «Прихожу к юзеру — этот дурак так вертелся на стуле, что у него шнур питания на ножку намотался. Матерюсь про себя, распутываю, запихиваю комп ногой подальше под стол, включаю, ухожу.

    Reply
  19. rpgshnik

    Вот это бред 😀

    Reply
  20. user851577

    В версии «1С:Бухгалтерия 8» рассматривается вопрос о расширении панели инструментов. Кроме стандартной кнопки «Пересчитать» будут добавлены дополнительные кнопки «Пересчитать, как я хочу», «Пересчитать, как хочет налоговая» и «Пересчитать правильно».

    Reply
  21. igee12

    (20), интересно какая кнопка будет по-умоланию

    Reply
  22. Painted

    Для чего передается в данную функцию передается параметр «Операция»?

    Reply
  23. Painted

    Хех, нашел еще «шедевр» от разработчиков 1С. )))

    Конструкция в рамочке всегда равно «Истина». И стоило столько кода городить? ))

    Reply
  24. vadim1011985

    ))) типа демотиваторов

    Reply
  25. herfis

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

    ЗЫ. Если серьезно, то перлы типа (22) и (23) обычно вылазят после рефакторинга, когда не хватило времени/сил на полное переосмысливание конечного результата в комплексе, а тесты проходит — и ладно. Кто в армии служил — тот в цирке не смеется. Музейной редкостью такое не является, а иногда и в своем коде что-то подобное находишь.

    Reply
  26. sergathome

    (25) Меня больше пугают вот такие вещи:

    Параметры = Неопределено;
    Параметры = ПолучитьСтруктуруПараметровПроцедуры();
    Параметры.Имя = «Петрович»;
    

    Чувствуешь себя идущим по минному полю…

    Reply
  27. Painted

    (25)

    а иногда и в своем коде что-то подобное находишь.

    В своем коде — это понятно. Ибо, кто мы? Ремесленники ковыряющиеся на земле. А это разработчики 1С, они работают в граде сияющем на холме по передовым методикам и стандартам и являются образцом для подражания.

    Мдаа!

    А ведь когда-то я так себе это представлял. Ну, приблизительно так.

    Reply
  28. herfis

    (27)

    В своем коде — это понятно. Ибо, кто мы? Ремесленники ковыряющиеся на земле. А это разработчики 1С, они работают в граде сияющем на холме по передовым методикам и стандартам и являются образцом для подражания.

    Мдаа!

    А ведь когда-то я так себе это представлял. Ну, приблизительно так.

    Ну, я всегда мыслил несколько иначе. Если уж в замечательном коде такого замечательного разработчика как я, возможны огрехи, то несчастным существам работающим в 1С за тарелку супа — и подавно простительно.

    Reply

Leave a Comment

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