Основы компьютерной графики




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

38 Comments

  1. Неопределено

    Тот факт, что эта статья вышла сразу после моей — совпадение?

    Reply
  2. DrAku1a

    Статья интересная. Не практичная, но именно — интересная!

    Reply
  3. HAMMER_59

    (1) По Вашей статье нужно уже обзор 3Д делать. Однозначно, велосипед изобретаете, через матрицы проще. Кроме того я бы отметил невидимые грани пунктиром, опять же в вашем случае, т.к. у Вас нет уменьшения координат x, y с возрастанием координаты Z, видимость грани определить очень просто — умножаем 2 вектора, получаем перпендикулярно направленный, и по координате Z определяем, где лицевая часть плоскости.

    Reply
  4. Неопределено

    (3) Вы не ответили на вопрос. Мою статью можно обсудить в моей статье.

    Reply
  5. HAMMER_59

    (4) Конечно совпадение. Я уже указал по поводу какой статьи написал свою «Продвинутая графика». Когда я отправлял на модерацию статью, а делал я это неоднократно, Вашей статьи еще не было.

    Reply
  6. Неопределено

    (5)Да, с модерацией тут проблема: моя статья проходила её 7 часов из-за разницы во времени и на момент публикации она появилась в конце первой страницы статей т.к. ставится дата отправки на модерацию, а не одобрения статьи. В итоге она почти сразу утонула во второй странице и осталась незамеченной, но дело не в этом. У нас пересекаются темы, а моя предыдущая статья (про часы) была продублирована другим пользователем, вот мне и стало интересно, совпадение ли это всё. Но раз так, то всё ок.

    Reply
  7. WalterMort

    Автор продолжает считать матрицу поворота не частным случаем проецирования, а первоосновой преобразований. А свои заблуждения фундаментальными знаниями.

    Reply
  8. WalterMort

    «Дальше новатор заявил, что подобное преобразование классическим способом сделать невозможно.»

    Еще и лжец, вдобавок.

    Reply
  9. HAMMER_59

    (7) Я же вам предоставил ссылку на теорию, читайте, проверяйте, сравнивайте.

    Реализация в коде уже тоже выложена. Все вертится, крутится, перемещается, масштабируется во всех вариантах.

    Я, конечно, понимаю что для Вас волшебство, преобразовать единичные векторы по X, Y, а потом утверждать, что вот это чудо теперь вы знаете смещение и коэффициенты по X, Y.

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

    Reply
  10. WalterMort
    После умножения матрицы координат точки на матрицу проецирования – изменится третье значение матрицы координат, которое обычно равняется 1. В данном случае, третье значение будет отличаться от 1, матрица координат примет вид (x, y, s). Что делать с третьим значением? Нужно каждую координату умножить на полученный коэффициент s.

    Это самое тупое что я когда-нибудь читал. После умножения на матрицу требуется домножить.

    Wiki: Линейное отображение

    Статья по книге Шилова от 1961. Странно, что вы называете меня новатором.

    Просвещайтесь. Там среди вариантов так хорошо знакомая Вам матрица поворота.

    Reply
  11. WalterMort

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

    Reply
  12. HAMMER_59
    Reply
  13. HAMMER_59

    (11) Доступно, не доступно, но Вы то пошли каким-то другим путем.

    Ну даже банальное, как вращается у меня квадрат вокруг окружности. Это перемещение, с дальнейшим вращением. Интересно как вы это со своим подходом сделаете.

    Я уже писал «и это еще детский сад компьютерной графики, т.е. совсем ни о чем»

    Reply
  14. HAMMER_59

    (10)

    Статья по книге Шилова от 1961. Странно, что вы называете меня новатором.

    Просвещайтесь. Там среди вариантов так хорошо знакомая Вам матрица поворота.

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

    Если не обратили внимания, матрица преобразований там 2х2, и у меня самое интересное до определенного этапа она была 2х2, затем была дополнена. Да по-любому совпадение.

    Reply
  15. WalterMort
    Все те же матрицы преобразований, и никакого бреда про векторы, базисы.

    Чукча не читатель?

    Из статьи на вики:

    «Матрица линейного оператора — матрица, выражающая линейный оператор в некотором базисе. Для того, чтобы её получить, необходимо подействовать оператором на векторы базиса и координаты полученных векторов (образов базисных векторов) записать в столбцы матрицы.»

    Если не обратили внимания, матрица преобразований там 2х2, и у меня самое интересное до определенного этапа она была 2х2, затем была дополнена. Да по-любому совпадение.

    Матрица 2×2 это векторы базиса, Совпадение? Не думаю.

    Просто вы невнимательно прочитали мою публикацию, прочитайте её еще раз и сравните с тем что написано в статье на вики. Может быть даже ошибку найдете, а она есть.

    Reply
  16. WalterMort

    (12)

    Для вращения вокруг сферы

    Вы понимаете различие между сферой и окружностью?

    Чтобы реализовать Ваше волшебство, мне достаточно добавить в обработку функцию переможения матриц. Функция создания преобразования по заданному углу уже есть. Будет время продемонстрирую.

    Reply
  17. HAMMER_59

    (15) Сделайте обработку подобную моей своим мегаспособом, вот тогда и подискутируем.

    Разово переместить и повернуть (или исказить) — это проще некуда.

    Да даже то, что я сделал это крайне просто, но сомневаюсь, что даже такое Вам под силу.

    Reply
  18. user774630

    И статьи небанальные, и читать интересно, но почему комментарии постоянно сводятся к взаимным подковыркам? Грустно.

    Автору спасибо за статью.

    Reply
  19. CyberCerber

    (17) Да, автор, вроде, пишет умные статьи про комп графику, но в комментах ведет себя совсем по-другому.

    Reply
  20. Неопределено

    (19) Я нашёл только одну его статью про графику, поэтому на всякий случай хочу заметить что он пишет ещё и в моих статьях и я не хочу чтобы нас спутали.

    Reply
  21. CyberCerber

    (20) А, ну да. Просто он по всюду оставляет свои едкие комменты, как будто он главный спец по графике на ИС

    Reply
  22. HAMMER_59

    (21) Вам никто не говорил, что некоторые вещи нужно приватно делать? Есть у Вас тут небольшой кружок, соберитесь приватно, и делайте там друг с другом что хотите. Зачем же это выставлять на общее обозрение? Это не культурно.

    Комментарий я написал к двум статьям. «Непределено» сам зашел ко мне в статью, и сам же предложил оставить комментарий в его статье, а сейчас негодует.

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

    А что конкретно едкого я написал: «Я всего лишь указал, что авторы некоторых статей изобрели велосипед, притом на квадратных колесах». Почему это вдруг, так в душу запало? Так ведь оно и есть на самом деле, чего тут обидного?

    Я уже пример приводил, это то же самое, что заявить, да ну эти запросы, объекты, смотрите как я напрямую с двоичным файлом работаю, какую я БД придумал. А потом еще и обижаться, когда укажут, что так уже никто не работает.

    Reply
  23. HAMMER_59

    (21) Хотите изменить культуру общения? Начните с себя. Ни одного ведь комментария по содержанию, сами же и разводите: «А ты, а он, а я».

    Мало того еще и кучкой гавкаете, а я человек эмоциональный, уподобляюсь вам.

    Reply
  24. Неопределено

    (22)

    предложил оставить комментарий в его статье, а сейчас негодует

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

    так уже никто не работает

    Как я уже писал, я выбрал эту тему потому что так в 1С ещё никто не работает. Да, эта технология сильно отстала от реальности, но если смотреть на эту реальность через призму 1С, здесь она в принципе не получила развития и я просто хотел подтолкнуть людей в данном направлении. Да, топорными средствами, потому что в начале изобрели топор, а только потом появились станки и топора я до этого не видел.

    Есть у Вас тут небольшой кружок

    Нет здесь никакого кружка. Я тут никого не знаю и меня никто не знает. У меня к вам нет претензий и не было. Кому-то могла не понравиться ваша критика, но не мне. Я её спокойно принял и всё.

    Reply
  25. HAMMER_59

    (24)

    По поводу велосипеда, вот эта статья — тоже велосипед, но я об этом молчу

    Сначала вы вырвали фразу из контекста, а теперь и вовсе изменили фразу. Одно дело рассказывать про велосипед, а совсем другое дело изобретать велосипед.

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

    Reply
  26. Неопределено

    (25) Как же с вами трудно вести диалог. Начали спор вы, пытаясь выставить меня идиотом, в котором я с вами соглашался. Выдумали какой-то сговор против себя, а теперь пытаетесь выставить себя жертвой. Какую фразу я изменили, когда вы цитируете сами себя?

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

    Я не придумал ничего нового и обозначил это. Вы тоже не придумали, но ничего об этом не сказали. Но вас никто не ткнул в это носом, а вы это сделали, а теперь пытаетесь всё переиначить, будто агрессор здесь я.

    Reply
  27. HAMMER_59

    (26) Вы слишком много приняли на свой счёт.

    Высказывания у меня местами действительно чересчур резкие. «Я солдат и красивых слов не знаю…»

    Я обобщил (причесал всех под одну гребенку), но резкие высказывания относятся в большей части совсем не к Вам, а к другому человеку. Именно к тому у которого «продвинутая графика».

    Странная какая-то позиция, если говорят, что можно сделать лучше, значит назвали идиотом.

    Я выкладывал свою выгрузку из ЗУП3 в КА1.1, сделана она была по принципам ЗИК. В тех же комментариях мне указали, что это уже пройденный этап, и сейчас уже реализовано лучше. Я ознакомился как сейчас реализована выгрузка, и действительно лучше, и переписал свою выгрузку. И не считаю себя от этого идиотом.

    При этом я не стал писать, что да Вы ничего не понимаете, я сделал как сделал, и вобще я написал статью как можно реализовать обмен через XML, не используя, конвертацию данных.

    Reply
  28. CyberCerber

    (23) Никакого кружка и кучки нет, я знаю других авторов также как и вас, т.е. почти не знаю. Просто у вас было много резких некрасивых высказываний в комментариях, об этом я и сказал.

    Reply
  29. HAMMER_59

    (28)

    Просто у вас было много резких некрасивых высказываний в комментариях, об этом я и сказал

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

    Reply
  30. WalterMort

    Автор просто считает себя очень умным. Обычно так делают глупые люди.

    Reply
  31. HAMMER_59

    (30) Ну что за детский сад? «А вот он считает себя самым умным, но он глупый» Я уже далеко не в том возрасте, чтобы мерять людей подобными категориями. Давно уже убедился, что если один человек силен в одном, например, отлично учился в институте, это еще вовсе не означает, что он лучше во всем.

    Странный Вы. Эту часть я у Вас уже видел, что такие преобразования можно сделать «продвинутым» методом.

    Вращение рыбы добавьте вокруг собственной оси + масштабирование рыбы и всего результата.

    После этого посмотри на Ваш код.

    Reply
  32. HAMMER_59

    (30) Есть такое выражение «упертый как баран»

    Не видно, что Ваш «продвинутый» метод — это танцы с бубном?

    Уже сейчас Вам приходится вымучивать расчет базиса, а это пока всего два вектора. А когда дойдет до 3 координаты, что делать будете?

    Да фигня сейчас третий вектор дорисуем?

    И это только еще начало, а у Вас там уже полная каша.

    Reply
  33. WalterMort

    (31) Если не заметили, рыба не растягивается как сопля подобно Вашему квадрату по ходу движения. Это сделано специально обратными преобразованиями.

    Посмотрите на код.

    Reply
  34. WalterMort

    (32) Когда дойдет до третьей координаты будем дальше делать плагин для unity по конструированию дорожных развязок с плавной адаптацией террэйна. Вот там реальные вопросы вполне успешно решаются. Векторами и кватернионами. Не через синус и косинус. А этот бессмысленный спор крадет у меня время на него. Посему позволю себе откланяться.

    p/s про кашу на Вашем месте я бы стал распространяться, я видел Ваш код.

    Reply
  35. pvlunegov

    (34) Согласен с вами.

    Автору советую почитать про квартенионы https://habr.com/post/183908/

    и применять их на практике.

    Эти классы давно и успешно применяются в 3 мерной графике и в 2 мерной тоже.

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

    Автор, интересуетесь графикой? Возьмите Unity, найдите там нужные вам технологии, почитайте теорию и переносите все на 1с.

    Общие подходы переносятся на любой язык, так как это математика.

    Reply
  36. KontoraB

    А нафига бухгалтеру компьютерная графика ? Платежки рисовать ?

    Reply
  37. HAMMER_59

    (36) Почти 10 лет только на инфостарте, и до сих пор только платежки бухгалтерам рисуете?

    Ничем Вам помочь могу.

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

    Reply
  38. KontoraB

    (37) Hammer — компьютерная графика это отдельная отрасль в IT индустрии и я думаю что нефиг натягивать это на 1С или переубедите меня — скажите как практически ( и в каких случаях ) конечному пользователю будет удобно и полезно использовать ваше решение в своей работе

    Reply

Leave a Comment

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