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




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

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