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




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

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 не будет опубликован. Обязательные поля помечены *