РусскийФокс — 1С-подобный язык программирования




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

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

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

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

50 Comments

  1. 79123890854

    На чём написан интерпретатор?

    Reply
  2. Steelvan

    Сдается мне, что такие отличия в синтаксисе связаны с анализатором, насколько автор смог его написать 🙂

    Reply
  3. Steelvan

    Ключевые слова заглавными подтверждают догадку почти наверняка.

    Reply
  4. Steelvan

    Поставлю плюс как единомышленнику в подобном направлении 🙂

    Reply
  5. andreosh

    FoxPro 9.

    Reply
  6. Aphanas

    Объектно-ориентированный? Покажите как объявлять классы.

    Reply
  7. sergathome

    +1. Автор — трёх китов — в студию !

    Reply
  8. andreosh

    Позже опишу. Уверяю, что здесь все будет нормально, так как фактически будет руссифицировано FoxPro-шная технология. Моей заслуги тут особой нет. Можете принять участие советом, как лучше руссифицировать. Пишите на UfaScript@mail.ru

    Reply
  9. andreosh

    Заглавными, чтоб улучшить отличия операторов. Могу сделать и без учета регистра. Но мне, кажется, что так лучше дисциплинирует. Тем более, что весь отладчик состоит из команды Сообщить(). С отладчиком пока проблемы, Хотя я сам отладчиками мало пользуюсь.

    Reply
  10. Steelvan

    (9) Вы за пользователя принимаете решение, что ему лучше, исходя из собственного восприятия мира.

    Это накладывает ограничение, что производит недовольство конечного программиста.

    Reply
  11. Jimbo

    напуркуа это изобретение велосипеда ?

    Reply
  12. andreosh

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

    Reply
  13. andreosh

    Кстати, на Ютубе буду выкладывать более полную инфу о развитии языка программирования РусскийФокс. Так что следите там.

    Reply
  14. andreosh

    Это велосипед с реактивным двигателем 😉

    Reply
  15. Идальго

    Зачем это?

    Reply
  16. Steelvan

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

    И таки да, надо учитывать целевую аудиторию. Это 1Сники.

    Если они привыкли писать Цикл и КонецЦикла с одной заглавной большой, то они будут плеваться на необходимость включать написание заглавными.

    У меня нет цели критики, это наоборот.

    Reply
  17. andreosh

    Шоб было. Пригодится. А если серьезно, то планирую объединить свои наработки на разных языках программирования (FoxPro, PHP, JavaScript,CSS, 1C, 1Script) в одном языке программирования. К тому же это будет единственный русскоязычный объектно-ориентированный язык программирования. Планирую реализовать в виде русскоязычных функций командную строку Windows. Одним словом, все фантазии не опишешь кратко, хватило бы времени. Но уже сейчас данный язык я использую в своих программах на FoxPro в виде подобия внешних обработок 1С. Видео будет на моем канале в Ютубе. (подписывайтесь).

    Reply
  18. andreosh

    Это не сложно. Сделаю еще и «КонецЦикла» в следующей версии. По возможности надо приспосабливаться к 1С-никам.

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

    Я правильно понял, что

    Вопрос()

    вызывает вывод окна с вашим текстом, заголовок которого будет «Вопрос!!!»?

    Reply
  20. zekrus

    Доброе утро!

    Тема весьма актуальная.

    Особенно на русском языке.

    Вот работа коллеги:

    http://www.gendoc.ru/

    С уважением

    Reply
  21. joynik

    Обязательно требую наличие нескучных обоев!

    Reply
  22. sansys

    Как известно, майкрософт прекратила поддержку Visual Foxpro, следовательно напрашивается вопрос: Для чего создавать продукты на языке вышедшем из употребления?

    Reply
  23. andreosh

    Потому что FoxPro — это уникальный язык, который даже майкрософт недооценила. Они может его и приобрели, чтоб убить. Это самый интерпретируемый интерпретатор, который может исполнять в полной мере куски своего кода сформированные программно при этом сохраняя полный доступ ко всем переменным программного кода.

    Reply
  24. andreosh

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

    Reply
  25. andreosh

    К тому же, РусскийФокс — это пока единственный объектно-ориентированный русскоязычный язык программирования. В следующей статье я пока жу, как создавать объекты. РусскийФокс удобен для начального обучения, так как не требует инсталляции, занимает всего 14 Мб. Если найду переводчика, то еще сделаю башкирскоязычный язык программирования для национальных школ. Изучать РусскийФокс можно по учебникам 1С. То есть я снижаю планку вхождения в 1С программирование. Надо опустить эту планку ниже плинтуса, чтоб дети могли учится программировать.

    Reply
  26. Perfolenta

    (17) Не волнуйтесь, единственным русскоязычным ООП языком не будет… 🙂

    у меня вот тоже руки чешутся опубликовать свой вариант… только всё хочется прилизать поприличней перед первым выходом в свет… но долго уже не стерплю… 🙂 пару месяцев максимум…

    Reply
  27. Perfolenta

    (20) а я на каком-то форуме читал сообщение автора КОНЦЕПТа, что проект закрыт, т.к. он не почувствовал спроса…

    Reply
  28. Perfolenta

    (17) посмотрел документацию и примеры… интересно замечать, как многие мысли совпали :)… в моем языке, который скоро так же выйдет в свет, тоже можно не ставить точки с запятой и не писать ключевые слова Тогда и Цикл… 🙂

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

    1Script в этом выигрышней выглядит, т.к. пытается соблюсти максимальную совместимость с 1С…. но из-за этого много ограничений у него…

    Честно говоря много нас таких стало, изобретателей волшебной палочки, но мне кажется, что это хорошо! Вам удачи в разработке и популяризации!

    Reply
  29. Perfolenta

    (4) вы тоже пишите свой язык?

    Reply
  30. Steelvan

    (27)

    26 ноября 2017г.

    Проект КОНЦЕПТ закончен. Все материалы этого сайта останутся в открытом доступе.

    Вероятно потому, что использование символа гадского $ многими нормальными людьми воспринимается негативно (правильно).

    Reply
  31. CheBurator

    Видимо, автор не видел ПОБЕДИТ.

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

    Reply
  32. Perfolenta

    (31) похоже уже нет… сайт не работает… версия 5.5 много лет уже не обновлялась…

    Reply
  33. CheBurator

    (32) угу, а продукт мог получиться приятственный для своей ниши…

    Reply
  34. Steelvan

    (29) Да, мы ведем работы в этом направлении.

    Reply
  35. Perfolenta

    (34) если не секрет, что это будет? Интерпретатор или компилятор? На базе какой технологии?

    Reply
  36. Steelvan

    Интерпретатор. Из 1С в js. Для работы на клиенте в обозревателе и на сервере в среде node.js.

    Компиляторы давно устаревшая и тупиковая технология.

    Сейчас купцам для решения их задач нужна работа в обозревателях (настольных и мобильных), а это только js код.

    Reply
  37. andreosh

    У Русского Фокса будет Web-интерфейс наподобие того, что я делал для OneScript см.мой канал на Ютубе. Русский Фокс будет ганератором JavaScript, PHP и CSS-кодов. Будет генерация шаблона для Joomla и взаимодействие с РусскийФокс через технологию Ajax. Это уже опробировано на OneScript. Но сначала я опишу примеры работы с объектом OpenOffice, так как РусскийФокс я применяю в своих программах, предоставляя пользователям писать подобие внешних компонент для генерации произвольных отчетов по шаблонам OpenOffice.

    Reply
  38. andreosh

    NodeJS оправдан, если много обращений к серверу, так как поддерживает асинхронную обработку запросов. Им я займусь после Joomla, так как Joomla пока больше распространена.

    Reply
  39. sansys

    (23) Безусловно, идеи заложенные в FoxPro опередили своё время. Это был мой самый любимый язык с 1991 по 2006 год но король умер и другого пока не видно. Ваша задумка с РуссимФоксом заслуживает высшей степени уважения но пока сам интерпретатор закрыт и не развивается существует огромный риск с выходом новых ОС получить не рабочую систему.

    Reply
  40. andreosh

    FoxPro развивается с DOS-версий. Возможно, что какие-то функции могут стать не рабочими, но сомневаюсь, что это случится с самим ядром. К тому же я планирую не просто FoxPro, а иной идеологический подход к программированию. Пока это сложно объяснить. Проще показать. В любом случае порог вхождения в РусскийФокс самый низкий: нужен только exe-файл и несколько DLL-файлов, без всяких инсталляций и заморочек. Сразу начинаешь программировать и смотреть результат. Это лучше, чем изучать устаревший Паскаль на уроках информатики, тем более, что на Русском Фоксе можно изучать ООП.

    Reply
  41. user928779

    (9)

    Хотя я сам отладчиками мало пользуюсь.

    Разработка нового языка программирования без отладчика — это мощно. Внушает уровень.

    Reply
  42. user928779

    (40)

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

    Подобные объяснения вашего продукта тревожат память Виктора Ивановича Петрика и Дениса Попова. К тому же, сказанное в (8):

    Уверяю, что здесь все будет нормально, так как фактически будет руссифицировано FoxPro-шная технология. Моей заслуги тут особой нет.

    навевает очень сильные сомнения в «продукте».

    Будьте добры, соберитесь с силами и расскажите простыми словами о ваших «прорывных» идеях.

    Reply
  43. andreosh

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

    Reply
  44. andreosh

    https://infostart.ru/public/861373/

    Собрался силами и описал, как создавать объекты. Но раньше времени лучше не рассказывать о планах, которые еще не оформлены, так как придется долго объяснять скептикам, как это будет сделано. На это уйдет много сил. Особо прорывных технологий не планируется, просто будет максимально удобный продукт, особенно для начинающих программистов. Так же планирую объединить свои знания других языков программирования (JavaScript, PHP, CSS, 1C, NodeJS, плюс командная строка Windows). В ближайшее время опишу формирование отчетов по шаблонам OpenOffice (LibreOffice), затем Excel, если будет потребность, потом работа с MySQL и создания экранных форм.

    Reply
  45. Ta_Da

    Не совсем понимаю все-таки — напуркуа? Как демонстрацию «смотри как могу» — понимаю, реальное использование в каких-либо проектах — не верю.

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

    Для сценариев есть 1script (осознанно сделанный максимально похожим по синтаксису с 1С) — с открытым кодом и кучей уже написанных решений.

    А для этого языка какая ЦА?

    Reply
  46. andreosh

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

    Reply
  47. pakko

    Работы ещё непочатый край, однако уже большой плюс ставлю.

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

    Спасибо, теперь будем ждать интерфейс

    Reply
  48. andreosh

    https://youtu.be/bXQqFr32Rds

    Исследования объектов в РусскийФокс

    Reply
  49. Perfolenta

    (45) не знаю, помните ли вы словесные баталии на тему зачем нужен русский язык в программировании когда вышла 1с 7… тогда интернет мало у кого был… а программистов пишущих код по русски вообще не было… всем было не удобно и не привычно… в том числе мне… тем не менее, спустя 20 лет существует множество программистов пишущих только по русски и у них не возникает вопрос «напуркуа»… 1С всем хорош, но не универсален, он сосредоточен на задачах управления бизнесом… на нем много чего не напишешь, либо костыль получится, медленный и кривой… а ведь хорошо бы иметь язык хотя бы уровня C#… мне это надо, думаю и другие, кому это надо найдутся… я желаю удачи всем, кто работает над своими версиями русского языка программирования…

    Reply
  50. andreosh

    На базе С# сделан русскоязычный 1Script, но у него проблемы с ООП и интерфейсом. В Русском Фоксе не будет проблем с ООП и интерфейсом, но будет проблема с многоплатформенностью (Русский Фокс только под Windows)

    Reply

Leave a Comment

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