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




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

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