<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Знак «равно» в первой строке блока размещает на один символ дальше, чем в остальных. А так — плюс, мне пригодится!
Все, догнал… Если перед первой строкой есть табуляция, то нужно выделять прям с самого начала строки вместе с ней — тогда нормально.
«Плюс» конечно.Вот еще бы циклы и условия выравнивать… 😉
«Плюс» конечно.Вот еще бы циклы и условия выравнивать…
Вроде их 1С сама выравнивает…
Здорово. Еще бы и «структуру» вырвнивала бы:
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить(«Дата»,_______Дата);
ПараметрыЗаполнения.Вставить(«Деталь»,_____Деталь);
ПараметрыЗаполнения.Вставить(«Количество»,_Количество);
ПараметрыЗаполнения.Вставить(«Автор»,______глТекущийПользователь);
В работающем коде конечно место _ стоят пробелы.
«Плюс» конечно.Вот еще бы циклы и условия выравнивать
А чем не нравиться Alt+Shift+F ?
+
Добавить форматирование в запросы
поле________КАК
ваолоыпрлва_КАК
алвыодао____КАК
лываж_______КАК
При нажатии какой-то «левой» комбинации вышло сообщение об ошибке и программа успешно закрылась!
Появился новый функционал. Качаем, критикуем. 😐
При нажатии какой-то «левой» комбинации вышло сообщение об ошибке и программа успешно закрылась!
Это — оооочень бета версия. То, что закрылась именно успешно, уже прогресс !!! 🙂
Это уже обновленная закрылась ?
(9) Из 4-х попыток выравнивания кода запроса — 4 раза вылетела по ошибке, трижды сообщила, что «Не удалось создать компонент ActiveX», один — «Программа выполнила недопустиую операцию…»
Не удалось создать компонент ActiveX — в описании сказано: «Зарегистрировать svcsvc.dll»
(11) Значит плохо читал — извиняй… 😀 Я все больше как-то по первой версии ориентировался…
Идея здоровская! Плюс!
http://infostart.ru/public/79256/ .
Часть функционала можно реализовать на платформе 1С: [делюсь опытом :)]
(0) Ты знаешь, зарегил я библиотеку, тока видно это действительно пока очень уж бета… При форматировании блока с равенствами из 4 попыток, отформатировала только один раз нормально и то со сдвигом первой строки на лишний пробел. В других случаях, прога делала вообще непонятно что: то удаляла блок вообще, то вытягивала его в одну строку с удалением знаков равенства. Если не трудно, положи первую версию вторым файлом — она как-то постабильнее будет.
Вроде работает =) Спасибо, +! Выравнивание различных структур языка не помешало бы.
Ждем более стабильную версию.
А идея очень нужная, полезная и т-д….
Вот бы еще автор подключил бы туда работу с регулярными выражениями — поиск, замену…
И пополняемый список правил, на основе этих же самых регулярных выражений,
тогда сама разработка утилиты была бы отдельно, а правила — отдельно,
и было бы удобней в том плане что стабильную версию самой обработки мог бы автор делать, сосредоточившись только на этом,
а правила выравнивания — все совместно и лучшие (или каждому кажущиеся полезные) включать к себе в файл настроек.
И с регулярными выражениями, можно еще много всяких фичь добавлять.
Ждем более стабильную версию.
А идея очень нужная, полезная и т-д….
Вот бы еще автор подключил бы туда работу с регулярными выражениями — поиск, замену…
И пополняемый список правил, на основе этих же самых регулярных выражений,
тогда сама разработка утилиты была бы отдельно, а правила — отдельно,
и было бы удобней в том плане что стабильную версию самой обработки мог бы автор делать, сосредоточившись только на этом,
а правила выравнивания — все совместно и лучшие (или каждому кажущиеся полезные) включать к себе в файл настроек.
И с регулярными выражениями, можно еще много всяких фичь добавлять.
Показать
Приведи парочку примеров — попробую прикрутить.
Можт быть проблема в паузе между сендкеями на медленных машинах. Сей прикручу настройку пауз — может быть поможет.
(18) Вряд ли, у меня с машиной все в порядке… Ну давай попробуем.
Приведи парочку примеров — попробую прикрутить.
Ты саму тулзу, на C# пишешь ?
Тогда просто подключи библиотеку и будет тебе счастье. Пример в интернете полно.
using System.Text.RegularExpressions;
REGEXP Википедия smile;-)
Regexp в 1С
Здесь же, на Инфостарте про regexp
Ты саму тулзу, на C# пишешь ? Тогда просто подключи библиотеку и будет тебе счастье. Пример в интернете полно. using System.Text.RegularExpressions;
Простенький пример на C# с сайта c-sharpcorner
Я имел ввиду примеры применения для 1С. Не КАК делать, а ЧТО делать.
Вот здесь Автор использует регулярные выражения для выделения лексем языка.
Конечная цель у него отличная от твоей, но принцип выделения лексем — одинаков.
например ты собираешь все лексемы содержащие Переменная = Значение;
Выравнивать по Началу первой лексемы, знака «=», Значение.
Для Т по З Цикл
Блаблабла
КонецЦикла
Тоже лексема — выравнивать
ну и так далее.
Вот здесь Автор использует регулярные выражения для выделения лексем языка. Конечная цель у него отличная от твоей, но принцип выделения лексем — одинаков.
например ты собираешь все лексемы содержащие Переменная = Значение; Выравнивать по Началу первой лексемы, знака «=», Значение.
Для Т по З Цикл Блаблабла КонецЦикла Тоже лексема — выравнивать
Опять ответ не на тот вопрос, который я задавал.
Я прошу не примеры использования регулярных выражения, а возможные примеры использования моей обработки для облегчения жизни программистов, т.е. прошу конкретизировать пожелания.
Да, странное форматирование 🙁
Взял одну процедуру, весь ее текст прижал к левому краю, далее Альт+Ф12 и Форматировать блок.
Результат повеселил 🙁 —
1. у комментария // появился/вставился лишний пробел / / 🙁
2. текст внутри строк выровнялся по знакам равно, т.е все что справа от знака равно, на одной колонке, но левая-то осталась как есть, прижатой влево 🙁
ИМХО в описании нужно специальным образом указать, что не происходит выравнивания операторов, аналогичного типовому форматированию, т.е. обработку нужно использовать только в дополнении к основному форматирования или для небольших блоков кода.
У нас есть аналогичный проект для разработчиков для AutoHotkey — список процедур/функций через svcsvc, авторские комменты, форматирование, удобное переназначение хоткеев под привычный набор хоткеев и т.п.
http://www.1cpp.ru/forum/YaBB.pl?num=1227553473/0
Основная проблема — неудобство получения выделенного текста, получаем только через передачу спец.символов в окно 1С для работы через буфер обмена.
На данный момент реализовано:
— Вызов списка процедур с фильтрацией наименований методов при наборе текста
— форматирование модуля при помощи code_beautifier.pl
— Автоматическая печать символа «|» после перевода строки, при необходимости — Enter.
— Автоматическая печать символов комментария «//» после перевода строки по Shift+Enter, если текущая.строка также является комментарием.
— удаление строки Ctrl+y
— Закрытие окна сообщение Ctrl+z (не всем нравится)
— символ ‘<‘ по Ctrl-,
— символ ‘>’ по Ctrl-.
— символ ‘|’ по Ctrl-\r
— переходы по процедурам в стиле OpenConf?
переход в процедуру (как в OpenConf? — ctrl+enter)
возврат на предыдущую позицию (как в OpenConf? — alt+{left})
Вопрос — как смог получить только выделенный текст в окне 1С?
Используешь посылку символов для работы через буфер обмена или другим способом?
Поделишься? очень нужно!
Вопрос — как смог получить только выделенный текст в окне 1С?
Увы, банальный SendKey «Ctrl-Insert», но попыток найти другой способ еще не оставил.
Плюс за попытку сделать что-то полезное.
Попробовал … есть проблемы … буду ждать стабильной версии.
Небольшая демка на тему.
Скачать, запустить, посмотреть фильм.
Небольшая демка на тему.
.
С нетерпением жду, когда можно будет этим пользоваться
С нетерпением жду, когда можно будет этим пользоваться
Каминг сун, как говорится. И года не пройдет.
А нельзя ли реализовать дополнительное форматирование, где вместо пробелов используется табуляция, и только концовка перед знаком равно (если нужно) выравнивается пробелами?
(30) Саш, я как всегда готов быть твоим тестером 🙂
Вот еще побаловался чуток.
Умный Enter.
(34) А с нами поделиться 🙂 ?
(33) Дразнишься? Уже слюнки текут…
Так ведь это все пока на коленке собрано, с торчащими во все стороны кусками проводов, и падает при любом чихе.
И работает пока только на 8.2.11.236. Вобщем до деления еще не так близко.
(36) Может, помощь какая нужна? или тестирование более активное? чтобы чихи быстрее ловить? 🙂
Пока нет. Но тебя я записал в книжечку.
Ну вот и появилась для Снегопата
равно-выравнивалка
с коментами обработка делает что-то чудесное !
Падает в 8.3