<?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='\
так автоформатирование как таковое не вкручено? хочется закрывать конфигуратор — открывать предприятие — нажимать кнопку в обработке — она парсит и обрабатывает…а тут копипаст туда сюда получается?
Вверху страницы баннер, там можно даже не закрывать конфигуратор.
Конечно не все там есть из перечисленного но можно и добавить.
p.s: в принципе, эту обработку думаю можно портировать для работы прямо из снегопата.
(1) serega3333,
Пока поддерживается только копипаст. В следующей версии предполагается выгрузка текстов модулей из режима предприятия и/или выбор уже выгруженных в файлы и их форматирование с сохранением в текстовые файлы.
Также предполагается запустить орфографическую проверку на наименование метаданных и переменных в модулях. Естественно с учетом правил именования объектов состоящих из нескольких слов.
Какой движок будете использовать для проверки орфографии?
совет: не забудьте добавить правила для исключений префиксов и суффиксов при проверке.
(2) pumbaE,
Сам пользуюсь СНЕГОПАТОМ. Вещь с правильной пометкой «must have»!
Можно попробовать реализовать функционал и на скриптах, но стоит ли игра свеч, если учесть, что для всех фломастеры на вкус разные и надо учесть возможность настройки форматирования.
…
Если есть желание, могу предложить такой вариант:
Пишется скрипт для СНЕГОПАТА (сам пока не разбирался с написанием), который по хоткею, копирует выделенный фрагмент текста или весь модуль целиком и помещает его в текстовый файл.
Параллельно запущена моя обработка, которая определяет наличие этого файла, обрабатывает его и кладет новый файл с форматированным кодом рядом. Скрипту СНЕГОПАТА останется только получить текст из нового файла и заменить его на старый.
…
Автору такого скрипта с такой логикой или более удачной — в подарок эта обработка.
…
В будущем предполагается развитие данной обработки и наращивание функционала.
В целом это должно вылиться в небольшую конфигурацию, которая будет контролировать корректность написания кода по оформлению, орфографии, повторяемости процедур и функций, наличие циклов в циклах, запросов в циклах и тому подобное.
(4) pumbaE,
Для орфографии будем использовать старый добрый Word.
C предложениями по вариантам замены, словарем исключений.
За совет спасибо. Префиксы и суффиксы постараемся учесть.
Вообще идея такого автоформатирования родилась тогда, когда в отделе разработчики стали высказывать друг другу свои соображения по поводу как правильно надо оформлять код и что чужой код читать невыносимо.
Идея этой обработки заключается в том, что не надо переучиваться под единый стандарт, если привести к общему знаменателю можно набором достаточно нехитрых алгоритмов.
(5) зачем же так сложно. Если есть обычная форма, то можно отделаться 5 строчками кода. Например для портирования обработки анализа цикломатической сложности кода, я добавил в модуль такие строки:
Показать
и у меня теперь прям из конфигуратора работает данная обработкаПример
Так, что если у вас весь разбор делается в модуле и сильно не завязано на управляемые формы, то можно легко и просто добавить вызов данной обработки прям из конфигуратора.
Посмотрите на скрипт spellchecker.js , там тоже есть проверка как word так и libreoffice.
прикольненько, но жаба давит…
format.js Функционал конечно послабее, но для халявного варианта хватает…
а по поводу снегопата (юзверем которого также являюсь) там есть подобный механизм:
(8) pumbaE,
Интересно. Спасибо.
Все форматирование происходит в модуле объекта. на формах реализованы только выбор настроек и вывод результата.
Еще бы придумать как настройки легко менять и будет вообще все в ажуре.
В принципе если заодно передать настройки в строке в формате XML можно для основного форматирования вообще обойтись без интерфейса.
А обработку использовать для создания настроек 🙂
Готовы взяться за сопряжение со СНЕГОПАТОМ?
(9) w-divin,
Жаба она такая 🙂
А функционал будем наращивать! Планов — громадье)
И, надеюсь, задавим Вашу жабу объемом возможностей!
(10) готов. Пишите на мыло. Мой профильСосна Евгений e-mail в скриптах думаю найдете 🙂
(12) pumbaE,
Отлично! Завтра Вам напишу.
(14) artbear,
Если обработка не полезна, то ей нет места ни в платном разделе, ни в бесплатном.
…
Посмотрим как это получится объединить со СНЕГОПАТОМ.
…
Возможно эта обработка через некоторое время станет продуктом лайт (то есть демкой, то бишь бесплатной).
А платной станет конфигурация, с большим функционалом.
Вопрос только сколько будет стоить эта конфигурация 🙂
Поэтому есть смысл купить обработку сейчас, что бы потом не платить больше.
Равно как и есть смысл подождать, когда обработка станет бесплатной.
Решение за вами!
Ждем бесплатную)
мне кажется актуально только со снегопатом, аpumbaE пора Снегопат store открывать ))). Скрипты по 99 центов будут разлетаться только в путь))
Решил выложить в общий доступ.
Работа по интегрированию в снегопат ведется.
Надеюсь у Евгения хватит терпения общаться с таким невеждой в JS как я и допилить функционал до рабочей версии.)
Судя по скрин шотам вещь довольно интересная и нужная (автоматические ошибки бывает проскакивают что есть то есть). Появятся деньги обязательно скачаю. Автору спасибо
(20) artbear, Возражений никаких нет, только приветствую).
А то из меня тестировщик не очень получается — то уеду, то подключить библиотеку не могу.
Если Евгений aka pumbaE не возражает, то милости просим)
а я немного покритикую… даже работая в режиме аврала я код оформляю как следует… единственное, чего я не делаю, так это не документирую, чего иногда не хватает…
а тем кто пишет как попало, вообще головы поотрывал бы… когда читаешь их код, думаешь, что они курили… я не в плане алгоритма, а в плане оформления, что бы удобно было читать… но за работу плюс
(23) WKBAPKA, Это не критика, а повсеместная действительность )))
Именно из-за этого данная работа и была проделана.
1. Когда видишь такой код — спокойно его форматируешь, и читаешь уже более привычном формате.
2. Когда одну конфу пишут несколько человек, что бы не заставлять и не переучивать людей к единообразному оформлению. перед сдачей прогоняешь через обработку и получаешь единообразный код.
(24)
если с этой точки зрения, когда пишут несколько человек, согласен, нужная вещь… вот интересно, а форматирует код под один шаблон, или можно под себя настраивать? а то не очень хорошо получается, пишут несколько человек, а код форматируется под одного человека 😉
(25) WKBAPKA, Можно хранить неограниченное количество настроек.
Мы у себя в отделе за основу приняли стандарты оформления изложенные на диске ИТС + оптимизировали под себя.
Форматироваться код должен не под одного человека, а с точки зрения правил принятых между разработчиками -участниками.
Добавлю от себя, к моему сожалению от говнокода данная обработка не спасет, даже если нормально отформатирует. Эх…
В обработке ошибка, там остались вызовы процедур для снегопата, чтобы работала и в предприятии необходимо закомментировать процедуры «МакросФорматированиеВыделенногоТекста» , «ФорматированиеТекстаПоНастройке», «МакросФорматированиеВыделенногоТекстаФорма».
(28) pumbaE, Евгений, ошибки нет, так как я выложил обработку не адаптированную под СНЕГОПАТ.
Прошу прощения, значит меня ввели в заблуждение.
(30) pumbaE, Это я сам себя ввел в заблуждение. Теперь исправил. Обработку обновил.
довольно забавная штука
Доброго времени суток! Добавьте ещё изменения:
1. 0 (пробел) 0 (кол-во пробелов до и после)
Пример:
Возврат (пробелы) СтруктураДействий; -> Возврат СтруктураДействий;
2.Расшифровка представления
Пример:
// ДанныеПараметры — ТИПДАННЫХ — ОПИСАНИЕ -> // ДанныеПараметры — ТИПДАННЫХ — Данные параметры
(0) есть такая функция в 1С — Alt+Shift+F
Все остальное — это придумывание себе работы.
Формуляты-оформляты….
Лучше б код писали грамотней.
И коментарии ставили….
(27) pumbaE,
по-моему, такие обработки еще больше всего напихают в код, чего там и не нужно вовсе было, и безмерно его утяжелят.
(35) AlexO, при должной настройке наоборот помогают исправить некоторые недочеты, которые на первый взгляд и не видны.
alt+shift+f — это хорошо, но как показано на рисунке, после обработки значительно лучше выглядит текст.
(36) pumbaE,
ну вот сразу — вот это «фНеОтбиратьПодразделение» — это что такое? Фукнция без скобок? 🙂
(37) AlexO, прочтите еще раз (27) — данная обработка от говнокода не спасет, но вот от «ИНаче» , «ЕСли» и т.д. очень даже помогает. Я очень надеялся, что может быть достаточно такой код отформатировать нормально и станет чуть легче, но (27) .
Еще раз хочу акцентировать внимание, лучше уж отформаированный говнокод, чем неотформатированный.
(33) Maxim2012,
От двойных пробелов убирает.
Возврат СтруктураДействий; -> Возврат СтруктураДействий;
..
Описание добавляет, если его нет, если описание есть — то оставляет его нетронутым
// ДанныеПараметры — ТИПДАННЫХ -> // ДанныеПараметры — ТИПДАННЫХ — ОПИСАНИЕ
, но если
// ДанныеПараметры — ТИПДАННЫХ — Параметр вывода ТЗ -> // ДанныеПараметры — ТИПДАННЫХ — Параметр вывода ТЗ
(0) Никак не избавлюсь от двойной пустой строки:
настроено пропускать строку после КонецЕсли/КонецЦикла
и пропускать строку перед КонецПроцедуры/КонецФункции
Оба правила накладываются и получаются некрасивые две пустые строки.
(40) vladal, Не могу повторить такой же ситуации у себя. Если возможно, пришлите на d.d.kruglov@gmail.com файл настроек и текст для форматирования, в котором есть появляются две пустых строки.
Интересная обработка! Но сам стараюсь изначально код оформлять нормально: так его и для себя в процессе работы читать проще)
Вот что, снегопатофаны… Обработочка полезная, автору плюс.
У меня практически всегда когда что-то пишу рядом открыт и пользовательский режим. Не проблема CTRL-C CTRL-V пару раз жамкнуть. А учитывая возможность настройки под себя — да вообще вполне самостоятельная вещь.
(43) GerHard спасибо).
По снегопату: Евгений (pumbaE) написал интеграцию к снегопату.
И соответственно, кто хочет — может использовать обработку как самостоятельную, кто со снегопатом — может загрузить ее функционал в него)
Как-то привык уже сразу все форматировать.
На мой взгляд — полезно, но не удобно.
Что за СНЕГОПАД? Дайте ссылку посмотреть.
(46) Геннадьевич,http://infostart.ru/public/102065/
(47) pumbaE, Спасибо, но вроде писали что эта разработка бесплатна.
(48) Геннадьевич, эта разработка да — бесплатна, а инструмент платный.
Спасибо 🙂
Спасибо!
(0) Вот что обнаружил: в форматной строке с разными локалями делается перенос после первой точки с запятой. В результате появляется разрыв строкового параметра и синтаксическая ошибка.
Пример:
разбивается на несколько строк и производится выравнивание знака равенства по самой длинной строке в блоке, добавляя 139 пробелов:
Я думаю, что в блоке поиска перевода строки по точке с запятой надо смотреть на парность кавычек.
не хватает выравнивания по запятой
Не большой троллинг.
А так автору спасибо.
(53) break, поддерживаю.
Пробовал нарисовать такое, да где-то прокол вышел — они потом все равно переформатируются.
(0) Что еще заметил: обработка режет большие комментарии — закомментированные блоки или текстовые описания и пояснения.
Рад, что обработка оказалась полезной. Прошу прощения за долгое молчание — загруз на работе.
Ошибки и недочеты безусловно есть, но как часто бывает, нет времени их устранить, тем более, что после написания обработки стал писать код сразу правильно :))
Если у кого есть желание дописать обработку — welcome! Могу опубликовать обновленную версию у себя, можете выложить ее в своем блоге — ссылку на обновление здесь размещу.