Разукрашка — раскраска кода 1С:Предприятия и Delphi (5.8.1.2)




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

99 Comments

  1. trozz

    Славно

    Reply
  2. luns

    Полезная вещица.. +

    Reply
  3. JohnyDeath

    а для 7-ки случайно нет?

    Reply
  4. alexk-is

    (3) Будет, но позже… 🙂

    Reply
  5. German

    с запросами не работает

    Reply
  6. German

    вот универсальный способ http://blog.1c-ei.ru/2009/05/blog-post.html

    Reply
  7. JohnyDeath

    (6) и за эту универсальность платить 35 американских?

    Reply
  8. German

    (7) ну HyperSnap того стоит… как альтернатива можно для всех свою подсветку синтаксиса написать. Возьметесь за 40$? 🙂

    Reply
  9. JohnyDeath

    (8) Конечно, если тебе надо сразу для всего, тогда возможно…

    Мне же просто 1С-подсветка нужна. 35 американских это не стоит, согласись 😉

    Да, программа стоящая, спору нет, но я попрежнему снимаю экран принтскрином и далее в Пэйнт.Нэт (

    Reply
  10. Душелов

    (9) Как вариант, я давно писал http://infostart.ru/projects/2419/

    Просто 1С-овские проигрывают в скорости раскраски.

    Reply
  11. JohnyDeath

    (10) Да это ж не частые операции. Несколько секунд можно подождать, не обломаюсь сильно.

    Да и твоё творение, оказывается, платным стало…

    Reply
  12. Душелов

    (11) Где?

    Reply
  13. Душелов

    (11) Если подождать, то вполне подойдет РаскраскаКода с ИТС.

    Reply
  14. JohnyDeath

    (12) что «где»? )) где это не частые операции?

    Reply
  15. Душелов

    (14) Где платные 🙂

    Reply
  16. JohnyDeath

    (15) Молодец!! Быстро ты!!! ))))

    я уж подумал, что меня глюконуло! Ан нет, нас не проведешь:

    [quote]Обновления

    04.05.2009 Программа

    Утилита раскраски текста в стиле 1С © Душелов[/quote]

    😉

    Reply
  17. Душелов

    (16) Я просто забыл залить архив после удаления.

    Reply
  18. alexk-is

    На самом деле разница, которую следовало бы оценивать, заключается собственно в результате:

    1. Можно вставить в статью на infostart.

    2. Правильность отображения.

    3. Удобство работы (юзабилити).

    4. Объем HTML страницы.

    5. Глубина вложения тегов.

    6. Скорость раскрашивания. А лучше время от начала раскрашивания до вставки в статью. И для сравнения можно еще померять время формировния раскрашенной статьи, по объему сопоставимой с http://infostart.ru/blogs/939/

    Ведь данная обработка готовилась специально для infostart’а.

    Reply
  19. ineoosaki

    (3) для семерки

    http://avb1c.narod.ru/files/tohtml.zip

    Reply
  20. alexk-is

    (19) Замечательно.

    +4 +18 Расчитываю, что результат будет лучше. Иначе нет смысла делать…

    Reply
  21. alexk-is

    (22) «Разукрашка» сделана специально для infostart’а. Я не планирую размещать ее где-либо еще. Я против размещения «Разукрашки» где-либо еще. Т.к. «библиотепа функций» публикуется не только на infostart’е, то я запрещаю ее влючение в библиотеку функций.

    Reply
  22. alexk-is

    (19) Теперь можно раскрашивать тексты для 1С:Предприятия 7.7.

    Reply
  23. ineoosaki

    (24) Покупать восьмерку, чтобы покрасить семерочный код?

    Мне обработка Рупора Абсурда, больше подходит.

    Reply
  24. alexk-is

    1.3.1.1 — оптимизировал работу с большими объемами данных, исправил неточности разметки.

    Reply
  25. Поручик

    Аничего, просто и со вкусом. Я тоже ею здесь воспользовался.

    Автору плюс.

    Reply
  26. alexk-is

    Добавил возможность включить использование CSS

    Reply
  27. drayv

    очень 😉

    Reply
  28. V_V_V

    А под управляемые формы 8.2 варианта обработки не будет?

    Reply
  29. alexk-is

    1.5.1.1 — оптимизировал работу с большими объемами данных. Теперь работает в несколько раз быстрее 1.4.1.5.

    10000 строк за 3 секунды…

    на 10000 строк работает в 2 раза быстрее

    на 60000 строк работает в 8 раз быстрее

    Reply
  30. CheBurator

    хм… это куда же надо разукрасить 60 тыс строк кода, да еще и ВСТАВИТЬ??? 😉

    Reply
  31. alexk-is

    (33) Ну, не знаю. «60 тыс строк кода» — это глобальный модуль из ЗиК 7.7.

    Вдруг кому-нибудь нужно поработать с большими строками — можно подглядеть один из вариантов оптимизации… 🙂

    Reply
  32. artbear

    (0) Копирование в буфер обмена не работает 🙁

    хотел скопировать код в виде HTML, а не получается 🙁

    Reply
  33. alexk-is

    (35) Хм, странно…

    Я не нашел способа загонять HTML в буфер обмена. Были примеры только про обычный текст без форматирования. Поэтому сделал через скрипт. В буфер обмена отправляется комбинации клавиш Ctrl+A Ctrl+C. Почему не сработал WScript? Не знаю. Может быть дело в настройках браузера?

    Reply
  34. artbear

    (36) Копирование именно HTML-кода в буфер обмена

    [code] HTMLДокумент = ЭлементыФормы.ПолеHTMLДокумента.Документ; // твое

    // — Артур — 28.01.2010

    Если КопироватьВБуферОбмена Тогда

    Окно = HTMLДокумент.parentWindow;

    Окно.ClipboardData.SetData(«Text», Результат);

    КонецЕсли;

    // —завершение

    HTMLДокумент.body.innerHTML = Результат; // твое

    [code]

    можно сделать отдельной настройкой, хотя мне нравится именно этот вариант как основной вариант копирования в буфер обмена

    Reply
  35. alexk-is

    (37) Я об этом способе знаю. Копируется в буфер обмена текст, а не HTML документ. Для вставки в Word или в статью на infostart этот способ не подходит. А для сохранения результата вверху есть кнопка «Сохранить». Будет сохранен текст в виде HTML-страницы.

    Я находил одну компоненту, которая делает все как нужно, но она платная с регистрацией и все такое…

    Reply
  36. artbear

    (38) Для вставки в код публикации на ИС я делаю так:

    Редактировать — далее выбираю посмотреть HTML-код публикации — далее выбираю вставку из буфера обмена, а туда занес данные чистого HTML, полученного с помощью (37)

    Без (37) ИМХО сложнее — сначала сохранить в файл, потом открыть файл, скопировать его текст и уже потом вставлять.

    Возможно, я что-то делаю не так — разукрашкой только начал пользоваться.

    Если другого способа нет, то мой удобнее и проще 🙂

    Reply
  37. alexk-is

    (39) Наверное, сделаю 2 варианта: копировать текст и копировать страницу. Вдруг у кого-нибудь тоже не заработает…

    Reply
  38. alexk-is

    (39) Сделал…

    Reply
  39. artbear

    (41) Все равно не удается так просто вставить раскрашенный код HTML в статью на ИС 🙁

    Делай все-таки 3 вариант — мой 🙂 «Скопировать исходный код HTML текста»

    Reply
  40. alexk-is

    (42) Так он там и есть. Это первый в списке. Влючается как флажек до нажатия кнопки «Раскрасить».

    Т.е. предполагается следующий порядок действий:

    1. Задаем параметры того что хотим получить в меню Настройка

    2. Вставляем текст

    3. Нажимаем «Раскрасить»

    Потом результат можно сохранить в файл если нужно, но если установлен флажек, то результат уже должен быть в буфере обмена.

    Reply
  41. Поручик

    (39), (43)

    Чисто для размышления.

    Пользуюсь обработкой чуть ли не с начала появления её здесь, и никак не могу понять, почему бы автору не добавить дополнительное поле, куда будет помещаться сформированный собственно HTML-код, как это уже давно сделано мною.

    На скрине последняя версия с моими доработками.

    Reply
  42. Поручик

    Поле HTML-код представляет собой простой до безобразия редактор текста. Раскрашенный результат виден сразу же при переходе на соответствующую закладку.

    Reply
  43. alexk-is

    (45) Обновил интерфейс

    Reply
  44. v.l.

    (0) А можно добавить тєги BB Code?

    Reply
  45. alexk-is

    (47) Можно. А зачем? Результат ведь в браузере не увидеть.

    Reply
  46. v.l.

    (48) Я как раз для форума и хотел — там же BBCode используются. Вот еще одно поле добавить, в котором BBCode показывать, или опционально html/bbcode.

    Хорошая идея? Разница только в тэгах, а структура та же.

    Reply
  47. alexk-is
  48. Поручик

    (50)

    Автор, добавь наконец в название «раскраска программного кода». А то народ тычется в поиск, и не находит.

    Reply
  49. alexk-is

    (51) Написал в поиске «раскрасить» и нашел сразу. Тем не мение переделал описание. Добавил теги.

    Reply
  50. v.l.

    (50) Спасибо!

    В описании есть опечатка — BBCobe, поправьте, пожалуйста

    Reply
  51. alexk-is

    (5) Работает 🙂

    Reply
  52. Поручик

    >>> Исключена возможность редактирования списка ключевых слов.

    Интересно. А почему? 😮

    Reply
  53. alexk-is

    (55) Для версии 2.1.0.1 всё осталось по прежнему. Списки ключевых слов можно подгружать и изменять. Файлы 2.1.0.1 лежат здесь.

    Для версии 3.0.0.1 существующая структура хранения списков ключевых слов уже не подходит, а новую я ещё не придумал. 🙁

    Списки ключевых слов пока хранятся в процедуре ПолучитьСтрокуКлючевыхСлов для всех вариантов работы Разукрашки. Т.е. их не нужно дополнительно подключать, они уже внутри. При желании можно поправить.

    Reply
  54. alexk-is

    (55) В версии 2.1.0.1 осталось всё по прежнему. Можно подгружать внешние списки ключевых слов или исправлять существующие. Файлы версии 2.1.0.1 здесь.

    Для версии 3.0.0.1 существующая структура хранения списков ключевых слов не подходит, а новую я ещё не придумал. 🙁

    Списки колючевых слов для всех режимов работы Разукрашки пока хранятся в функции ПолучитьСтрокуКлючевыхСлов. При желании их можно исправить там.

    Reply
  55. tormozit

    Во строенном языке «%» не красится красным, а должен.

    Reply
  56. alexk-is

    (58) Исправлено в 3.0.1.3 и в 2.1.0.2

    Reply
  57. fishca

    Небольшая ошибочка при раскраске текста запроса, на рисунке обведено красненькими овальчиками 😉

    Reply
  58. fishca

    Правильный файл

    Reply
  59. alexk-is

    (61) В приведенном примере не совсем текст запроса, а скорее текст программы. Текст запроса должен быть без кавычек и без разделителей строк. Т.е. так, как в консоли запросов.

    Reply
  60. fishca

    (62) т.е. ты хочешь сказать что это не ошибка, а фича такая 😉 ?

    Reply
  61. alexk-is

    (63) Скорее так — не целевое использование.

    Reply
  62. ROM_1C

    Хорошо получилось!

    Reply
  63. Abadonna

    (0) Опробовал в боевых условиях — классно.

    Только как быть бедным семерочникам, у которых нет на компе 8.1?

    Кстати (как и следовало ожидать), без проблем конвертнулась в 8.2

    P.S. И почти прилично код Дельфи раскрасило (рис.) 😉

    Reply
  64. Поручик

    (66) Портировать на 7.7. , вестимо. Плагин к тотал коммандеру для просмотра epf не сегодня утром придуман. Дальше в дело вступают руки и голова.

    Reply
  65. Abadonna

    (67) Надо узнать, есть ли 8.х у Арчибальда? Если нет — буду за бабки ему HTML формировать 😀 😀

    Reply
  66. Abadonna

    Чуток доработал под Дельфи. Английские операторы во многом совпадают, добавил еще некоторые ключевые слова. Ежели что забыл, добавить можно так:

    в модуле объекта после строки

    ИначеЕсли РежимРаботы = 1 Тогда (номер строки 534)

    добавлять по аналогии в строку 535

    СписокКлючевыхСлов = «|_getperformancecounter|_idtostr|…………………..

    Работать в режиме для 7.7

    _________________________

    17.08.10 Вот сейчас точно все ключевые от Дельфи в Razukrashka3_1_0_2+.epf

    плюс кусок для вставки в KljuchevyeSlova77.xml или (и) в KljuchevyeSlova8.xml — Ключевые слова дельфи XML.txt

    Reply
  67. Арчибальд

    (68) У меня даже губозакаточная машинка есть 😉

    Reply
  68. alexk-is

    (69) Добавил раскрашивание кода Delphi, но так как Delphi у меня нет, то в абсолютной правильности раскрашивания кода я не уверен. Нужно проверять

    Reply
  69. V_V_V

    (66) Конвертится обработка под 8.2 замечательно — но только под толстого клиента. alexk-is не планируешь под тонкого клиента сделать?

    P.S. Может уже и спрашивали, только станиц обсуждения много…

    Reply
  70. Арчибальд

    Работа одобрена группой «Экспертиза публикаций» и получила соответствующий значок

    http://infostart.ru/community/groups/148/blog/1159/

    Reply
  71. alexk-is

    (73) Спасибо. Значок прикрутил. 🙂

    Reply
  72. Abadonna

    (74) Значок в 2 раза уменьшал?

    Reply
  73. alexk-is

    (75) Нет. В 2 раза увеличивал. 🙂

    Reply
  74. Abadonna

    (76) Понял 😉 Я-то прям который торчал в анонсе правил, а туда уменьшать пришлось

    Reply
  75. alexk-is

    (69) Теперь любимые цвета стали ещё любимие 🙂

    Reply
  76. erem

    Почему-то при разкраске конструкции : |ИНДЕКСИРОВАТЬ ПО НомерСтроки»; исчезает НомерСтроки. И зачем вот это: ПодключитьОбработчикОжидания(«ПроверитьНовуюВерсию», 100, Истина); — У меня пишет «Подключение…» и зависает 1С 🙁

    Reply
  77. alexk-is

    (79)

    И зачем вот это: ПодключитьОбработчикОжидания(«ПроверитьНовуюВерсию», 100, Истина);

    Ну, это чтобы проверить наличие новой версии обработки 🙂

    Чтобы не проверялось наличие новой версии в меню есть соответствующая галочка и 100 секунд, чтобы её нажать 🙂

    |ИНДЕКСИРОВАТЬ ПО НомерСтроки»; исчезает НомерСтроки

    Буду проверять

    Reply
  78. Abadonna

    Сходу замечено: в Дельфи не красит оператор IF (рис.)

    Reply
  79. Abadonna

    В общем, тут в файле добавлено несколько ключевых слов к Дельфи, и значения цветов по умолчанию как я, любимый, привык 😉

    Reply
  80. Abadonna

    Алекс, я что-то просохатил или его там нема?

    Хотелось бы ключевые слова жирным.

    Reply
  81. alexk-is

    (79) Добавил обработку начала строки с символа «|»

    (81) Добавил IF в список ключевых слов

    (82) Добавил выделение ключевых слов Delphi жирным шрифтом

    Reply
  82. alexk-is

    (83) 1. Исправил обработку точек в текстах запросах

    2. Оптимизировал результат при возможной смене цвета в раскрашиваемом тексте — формируется меньше тегов. Актуально для Delphi и текстов запросов

    Reply
  83. support

    А можно ли перевести данный парсер на php, я бы тогда вставил бы в обработку показа сообщений из форума?

    Reply
  84. alexk-is

    (86) Конечно можно. Код открыт. Осталось только найти человека, который пишет на php и понимает 1С. 🙂

    Reply
  85. Abadonna

    Алекс, вынужден тебя похвалить еще раз 😉

    Без всяких дополнительных танцев с бубном «Разукрашка» распрекрасно отработала на нашем сайте

    Сервис-М

    Reply
  86. alexk-is

    (88) Это ты ещё не видел новую версию универсального журнала документов. Вот там чудеса так чудеса.

    Reply
  87. Abadonna

    (89) Вот и бегом по ссылке, регься и публикуй!

    Reply
  88. Ish_2

    (90) Сервис-М — Это что ?

    Зашел чего-то … всё пусто . Потыкался , потыкался и вернулся .

    Какая сверхидея создания нового сайта ? и чья ?

    Чем удивлять собираетесь ?

    Reply
  89. Abadonna

    (91)А чем он должен быть заполнен в первый день?

    Даже и не день 😉 А первый час практически

    Reply
  90. Ish_2

    (92) Понял. Удивлять нечем.

    Всё как обычно ?

    Фриланс, статьи, вакансии ?

    Ты бы хоть что-нибудь о сайте и его задачах написал.

    Reply
  91. AleksR

    Обнаружил досадную ошибку (недоработку) и в версии 2, и в версии 5: если ни до, ни после знака «=» нет пробелов, то следующее слово не воспринимается как ключевое.

    Например:

    СтандартнаяОбработка=Ложь;

    Reply
  92. Поручик

    (94) А не фиг так код писать. Положено разделять пробелами.

    Reply
  93. alexk-is

    (94) Исправлено в 5.1.3.2

    Reply
  94. AleksR

    (96) Спасибо!

    Reply
  95. AleksR

    Обнаружил ещё одну небольшую ошибку и в версии 2, и в версии 5: если после слова стоит точка, то оно не воспринимается как ключевое. А это актуально для 1С 7.7, например:

    Док.ПризнакНакладной = Перечисление.ПризнПрихНакл.ВозвратОтПокупателя;

    Слово «Перечисление» должно выделяться красным цветом.

    Reply
  96. alexk-is

    (98) (99) Исправлено в 5.2.0.1

    Во всех режимах изменен разбор строк, в т.ч. содержащих некоторые синтаксические ошибки.

    Reply
  97. AleksR

    (100) Спасибо!

    Reply
  98. alexk-is

    Есть пример? Например, как (66) (68) (81)

    Reply
  99. alexk-is

    (86) Может это поможет? http://infostart.ru/public/84126/

    Reply

Leave a Comment

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