Файл разметки 1С для Notepad++




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

71 Comments

  1. e.kogan

    Вот ещё сюда бы ссылку на сам Notepad++ — было б совсем хорошо.

    Reply
  2. knight2007

    notepad-plus.sourceforge.net/ru/site.htm

    Reply
  3. JohnyDeath

    А для SciTE случаем нету?

    А как вставляется в Word? Копипастом из Ноутпада?

    Reply
  4. knight2007

    Копируется из Notepad Меню-NPPExport-CopyRTFToClipboard, вставляешь просто Paste

    Reply
  5. basicm

    Плюс авансом — давно было желание иметь в нпп++ этот синтаксис

    Reply
  6. sytkosa

    Плюс однозначно

    Reply
  7. artbear

    И какие же вещи вы пишите в отдельном НП++ ?

    ИМХО неудобно — нет проверки синтаксиса хотя бы в объеме 1С, нельзя менять метаданные, нет подсказки по метаданным.

    Reply
  8. knight2007

    (7) это уже описывать API нужно, впринципе Notepad++ и это поддерживает…

    Reply
  9. NDM

    СПАСИБО, плюсую!

    Сам хотел сделать, но все руки не дойдут, NP++ супер блокнот.

    (7) Писать с нуля код в нем, конечно смысла мало, но как для разборки кода, множественных вставок, замен, поиск по регулярным выражениям и т.д. тут NP++ на несколько голов выше стандартного редактора 1С.

    Если доделаете подсветку ключевых слов ( Тогда ), группировки по условным операторам, Если КонеЦесли, Пока Цикл и т.д., а так же директивы препроцессора, и вроде можно как то сделать независимость к регистру т.е. что бы эквивалентными считались Тогда и тогда и ТоГда — будет просто супер!

    Reply
  10. lustin

    (7) когда исследуешь исходники от v8Unpack очень приятно будет видеть

    знакомую расцветку 😀

    а так для реальной работы одной подсветки синтакиса маловато

    однако плюс поставил — потому что пригодитЦо

    Reply
  11. Delpass

    оо..Плюсую!

    Reply
  12. NDM

    knight2007, планы по развитию данной фичи есть, или это уже финал?

    Reply
  13. knight2007

    (12) Расширяю потихоньку количество операторов. По мере работы с документацией по 1С. Буду периодически обновлять.

    Можно сделать еще и Autocomplete, но как то странно работает. При добавлении «Стр» и нажатии на Ctrl+Space добавляет СтрСтрДлина, т.е. не затирает уже набранное…. Думаю больше раздражать будет, чем помогать 🙁

    Reply
  14. NDM

    (13) Да такие грешки водятся в NP++ (если не ошибаюсь такие проблемы есть и в редакторе E, а он крутейший из крутейших 😉 ) при объявлении доп. языков, на мой взгляд Autocomplete не так важно, как полное соответствие ключевых слов и группировки конструкций.

    Типов, функций, процедур и т.д. предостаточно в 1С 8.х поэтому их сложно все прописать, но даже если осилишь эту задачу, народ захочет Autocomplete свойх объявлений хранящихся в конфигурации, а это уже совсем космос!

    Жду новых версий!

    Reply
  15. kalapuser

    Плюс++

    Reply
  16. Ihty

    Plus

    Reply
  17. aipnnov

    Реально пользуюсь своей разметкой в нпаде++ уже 4 года, но не знал, что это необходимо такому количеству пользователей.

    Плюс за опережение,распостранение и популяризацию нп++

    Reply
  18. NDM

    Спасибо за обновление, стало лучше! 🙂

    Reply
  19. tomminoker

    💡 СПАСИБО! Давно искал!!!

    Reply
  20. Gilev.Vyacheslav

    спасибо!

    Reply
  21. yarsort

    Расскажите поподробней: как и куда записывать эти файлы, что бы воспользоваться этой надстройкой в блокнот++?

    Что-то не могу понять, как же ею пользоваться.

    Заранее спасибо. Перепробовал кучу вариантов- не получается.

    Reply
  22. lomaker

    (21) присоединяюсь — перепробовал много способов — не могу подключить никак!!! Опишите пожалуйста подробно инструкцию по подключению.

    Reply
  23. lomaker

    пардон скачал более новую версию блокнота — получилось. видимо был глюк в старой версии. Заметил недочет — некорректно закрываются процедуры и функции. Когда в конце добавляешь точку с запятой «КонецПроцедуры;» вроде начинает понимать. Видимо как-то надо ; по особому обрабатывать

    Reply
  24. hgs88

    Спасибо за файл разметки.

    Подскажите, пожалуйста, как его прикрутить к Notepad++? Прикрепленная инструкция как-то непонятно написано… Заранее спасибо!

    Reply
  25. knight2007

    (24) Можете прочитать на сайте

    Пункт «Файлы для Языка определенного пользователем»

    Reply
  26. knight2007

    Добавил немного операторов на английском…

    Reply
  27. boogie

    Если б мог поставил бы два плюса )

    Reply
  28. Поручик

    Интересно. У меня зарезервированные слова не выделяет. Весь текст синий, комментарии зелёные.

    Noteoad 5.7 Unicode

    Windows 7

    Reply
  29. Поручик

    Всё, разобрался.

    У меня дефолтовая кодировка была установлена UTF8, переключил на ANSI, заработало.

    Reply
  30. knight2007

    (29) Там со шрифтом критично… Один самый большой минус, что большие и маленькие буквы для Notepad отличаются в русском языке 🙁

    Reply
  31. bankir82

    респект и уважуха, держи плюс

    Reply
  32. metaeditor

    на всякий случай скажу про http://infostart.ru/public/19544/

    а то вдруг мужики то и не знают

    Reply
  33. knight2007

    (33) Прикольная штука ) Там все завязано на программировании в 7-ке. Плюс нужно OpenConf ставить.

    Мне нужен был только синтаксис 7/8. OpenConf для этого ставит круто )

    Reply
  34. Sergey_Murzinov

    Хорошо, удобно. Спасибо

    Reply
  35. cool.vlad4

    (7) npp позиционируется как замена блокнота для спеца, — я там редактирую xml, html(есть плагин tidy для приведения к xml, удобно при парсинге), скрипты vbs,php, иногда c#. Плюс в том, чтоб отредактировать мелочь не нужно запускать монструозную среду, в случае 1С, конечно, все равно придется, поэтому твоя правда, конечно.

    (8)Это как? не слышал о таком

    Reply
  36. nkure

    Спасибо от души, а то часто пишу из под мака.

    Reply
  37. solovei777

    Классно! Доволен как слон :).

    Reply
  38. maxim290

    То, что надо! Спасибо.

    Reply
  39. Rembi_999

    Чтож попозже посмотрим … что — с чем.

    Reply
  40. zog

    ааа, я вас люблю *_*

    спасибо!!!

    Reply
  41. headMade

    подскажите плиз поподробней как подружить это с Notepad++

    я что-то не понял ничего в инструкции

    «1. Скачайте файл языка определенного пользователем на ваш компьютер»

    что это за файл такой «языка определенного пользователем»

    3. Нажмите Пуск, Выполнить, наберите (или скопируйте) %APPDATA%Notepad++ и нажмите ok

    это действие приводит к открытию папки C:Documents and Settings olikApplication DataNotepad++

    какой в нем смысл?

    вобщем непонятно

    Reply
  42. Поручик

    (43) Открываете в редакторе файл

    %APPDATA%Notepad++userDefineLang.xml или %ProgramFiles%Notepad++userDefineLang.xml и вставляете в конец его содержимое файла из сабжа или просто замещаете содержимое, если он у вас пустой.

    Здесь всё понятно расписано.

    http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=User_Defined_Language_Files

    If you don’t have an userDefineLang.xml file already, you can drop this file among your other configuration file, in the Notepad++ Install Folder. It should be named userDefineLang.xml.

    Otherwise, open both the existing and new file.

    Select all of the new file, copy, and paste at the end of the current file.

    This will have created a spurious </Notepad_Plus><Notepad_plus> pair i the middle, each tag on a line by itself. Remove these two consecutive lines.

    Close Notepad++.

    Reply
  43. headMade

    файла userDefineLang.xml у меня нет ни в %APPDATA%Notepad++ ни в %ProgramFiles%Notepad++\r

    Но в пункте меню «Синтаксис» у меня присутствуют кодировки по J, С и др.

    Если просто скопировать userDefineLang.xml скачанный отсюда, то в код в кодировках 1С не появляется

    подскажите плиз что еще можно проверить

    Reply
  44. knight2007

    (45)

    Файла там вначале такого нет.

    При добавление файла userDefineLang.xml в путь %APPDATA%Notepad++, %ProgramFiles%Notepad++\r

    добавится подменю в меню Синтаксис «1С».

    Есстественно после перезапуска Notepad++

    Для Vista/7 это путь C:Users[Имя пользователя]AppDataRoamingNotepad++

    Файлы будут подсвечиваться с расширением .onec или.onec.txt

    Reply
  45. mailrum2004

    Спасибо автору. Сразу не разобрался куда бросать файл userDefineLang.xml. Сначала положил файл в %ProgramFiles%Notepad++, а оттуда он не работает. Заработало, когда скопировал файл в %APPDATA%Notepad++. Оказывается при инсталяции Notepad++ есть опция использовать папку %APPDATA% или не использовать.

    Не раскрашивает файл сохраненный из 1с 8, т.е. в кодировке UTF-8, раскраска появляется только после преобразования в кодировку ANSI (меню EncodingConvert to ANSI)

    Reply
  46. Veselchak

    Спасибо. Файликом пользуюсь, добавил много своего.

    Reply
  47. Kaniman

    Спасибо! в портабельную версию скинул в папку с программой, работает!

    Reply
  48. DigitalMan

    В версии 6.5.5 не подсвечиваются начало и конец процедур и функций, не работает группировка/свертка.

    Подсветка работает только для некоторых методов глобального контекста.

    Сделал через:

    Синтаксисы — Задать свой синтаксис — Импортировать.

    ЧЯДНТ?

    Reply
  49. PetroP

    (50) Что-то в Notepad++ поменялось полгода назад. Пришлось переделывать/перенастраивать подсветку в самом Notepad++.

    Reply
  50. knight2007

    (51) PetroP, произошли изменения в стайлере Notepad++. Добавил в проект файл для импорта.

    Reply
  51. knight2007

    (50) DigitalMan, произошли изменения в стайлере Notepad++. Добавил в проект файл для импорта.

    Reply
  52. madfox

    Не выделяется инструкция «ИЛИ»

    Reply
  53. Eriksson

    Спасибо за труд!

    Reply
  54. knight2007

    (54) madfox, должно быть заглавными буквами «ИЛИ». Сам текст переключите на UTF-8

    Reply
  55. infocom

    Версия сырая… (((

    Reply
  56. ololoanonim

    а я сам сделал 🙂 пока 1С -ка жевала миллионы записей было много времени на раскраску)

    Reply
  57. Viktor_Ermakov

    я скачал, но не могу ей воспользоваться… по иснтрукции написанной в описании, ничего не получается…

    Поэтому ставлю — пока…

    Reply
  58. knight2007

    (59) TEENAGER1984,

    для 6.x и выше инструкция простая Синтаксис — Задать свой синтаксис — Импорт — Файл 1C-utf8.xml

    Текст кода 1С должен быть в формате utf-8 !

    Расширение файлов *.onec (либо установите своё в поле «Расшир.» в окне настройки синтаксиса)

    Только что проверил на версии 6.8.3

    Reply
  59. CaSH_2004

    А текст запросов раскрашивает как в 1С? Чтобы вместо черного было как в конструкторе запросов

    Reply
  60. Alien_job

    На актуальном NP++ некорректо обрабатывает конструкцию Пока Х Цикл КонецЦикла;

    Ждет второй КонецЦикла;

    upd: Аналогично Для сч = 0 По Количество — 1 Цикл

    Reply
  61. knight2007

    (62) Обновил.

    Reply
  62. artbear

    Ребята, извините, а почему не VSC со специальным крутым расширением для 1С и OneScript xDrivenDevelopment.language-1c-bsl ?

    я сам пользовался NP++, но раскраска для NP++ давно устарела, теперь намного лучше уже все.

    Reply
  63. AntonSm

    (64) NP++ быстрее, чем VSC. На не очень производительном компе разница существенна.

    Я сам в зависимости от ситуации использую и то, и то

    Reply
  64. ksvd

    Просветите — что такое VSC. Яндекс говорит явно что-то другое: VSC — система курсовой устойчивости

    Reply
  65. artbear

    (66) Visual Studio Code

    очень рекомендую

    Почитайте офиц.страницу расширения xDrivenDevelopment.language-1c-bsl для 1С и OneScript

    https://github.com/xDrivenDevelopment/vsc-language-1c-bsl

    Reply
  66. knight2007

    (64) Ну вы сравнили: блокнот и IDE

    NPP используется для быстрого просмотра / изменения кода.

    Смысл грузить огромную IDE, когда есть установленная 1С.

    Reply
  67. artbear

    (68) вы не путайте Visual Studio 20ХХ и Visual Studio Code

    Это разные инструменты!

    Reply
  68. ksvd

    (67)

    Visual Studio Code

    Спасибо

    Reply
  69. SerVer1C

    Кто-нибудь в курсе, как в Notepad++ побороть проблему раскраски кода в различии малых и больших русских букв? А то получается, что слово «Процедура» будет подсвечиваться, а «ПрОцЕдУрА» — уже нет.

    Reply
  70. Xapac

    у меня половину синтаксиса не подсвечивает. аяяй

    Reply
  71. knight2007

    (72) текст должен быть в utf-8, операторы с большой буквы (рекомендованный стиль 1С)

    Для notepad++ русские слова в разном регистре — это разные слова.

    Reply

Leave a Comment

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