<?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='\
так автоформатирование как таковое не вкручено? хочется закрывать конфигуратор — открывать предприятие — нажимать кнопку в обработке — она парсит и обрабатывает…а тут копипаст туда сюда получается?
Вверху страницы баннер, там можно даже не закрывать конфигуратор.
Конечно не все там есть из перечисленного но можно и добавить.
p.s: в принципе, эту обработку думаю можно портировать для работы прямо из снегопата.
(1) serega3333,
Пока поддерживается только копипаст. В следующей версии предполагается выгрузка текстов модулей из режима предприятия и/или выбор уже выгруженных в файлы и их форматирование с сохранением в текстовые файлы.
Также предполагается запустить орфографическую проверку на наименование метаданных и переменных в модулях. Естественно с учетом правил именования объектов состоящих из нескольких слов.
Какой движок будете использовать для проверки орфографии?
совет: не забудьте добавить правила для исключений префиксов и суффиксов при проверке.
(2) pumbaE,
Сам пользуюсь СНЕГОПАТОМ. Вещь с правильной пометкой «must have»!
Можно попробовать реализовать функционал и на скриптах, но стоит ли игра свеч, если учесть, что для всех фломастеры на вкус разные и надо учесть возможность настройки форматирования.
…
Если есть желание, могу предложить такой вариант:
Пишется скрипт для СНЕГОПАТА (сам пока не разбирался с написанием), который по хоткею, копирует выделенный фрагмент текста или весь модуль целиком и помещает его в текстовый файл.
Параллельно запущена моя обработка, которая определяет наличие этого файла, обрабатывает его и кладет новый файл с форматированным кодом рядом. Скрипту СНЕГОПАТА останется только получить текст из нового файла и заменить его на старый.
…
Автору такого скрипта с такой логикой или более удачной — в подарок эта обработка.
…
В будущем предполагается развитие данной обработки и наращивание функционала.
В целом это должно вылиться в небольшую конфигурацию, которая будет контролировать корректность написания кода по оформлению, орфографии, повторяемости процедур и функций, наличие циклов в циклах, запросов в циклах и тому подобное.
(4) pumbaE,
Для орфографии будем использовать старый добрый Word.
C предложениями по вариантам замены, словарем исключений.
За совет спасибо. Префиксы и суффиксы постараемся учесть.
Вообще идея такого автоформатирования родилась тогда, когда в отделе разработчики стали высказывать друг другу свои соображения по поводу как правильно надо оформлять код и что чужой код читать невыносимо.
Идея этой обработки заключается в том, что не надо переучиваться под единый стандарт, если привести к общему знаменателю можно набором достаточно нехитрых алгоритмов.
(5) зачем же так сложно. Если есть обычная форма, то можно отделаться 5 строчками кода. Например для портирования обработки анализа цикломатической сложности кода, я добавил в модуль такие строки:
Показать
и у меня теперь прям из конфигуратора работает данная обработка
Так, что если у вас весь разбор делается в модуле и сильно не завязано на управляемые формы, то можно легко и просто добавить вызов данной обработки прям из конфигуратора.
Посмотрите на скрипт spellchecker.js , там тоже есть проверка как word так и libreoffice.
прикольненько, но жаба давит…
а по поводу снегопата (юзверем которого также являюсь) там есть подобный механизм: Функционал конечно послабее, но для халявного варианта хватает…
(8) pumbaE,
Интересно. Спасибо.
Все форматирование происходит в модуле объекта. на формах реализованы только выбор настроек и вывод результата.
Еще бы придумать как настройки легко менять и будет вообще все в ажуре.
В принципе если заодно передать настройки в строке в формате XML можно для основного форматирования вообще обойтись без интерфейса.
А обработку использовать для создания настроек 🙂
Готовы взяться за сопряжение со СНЕГОПАТОМ?
(9) w-divin,
Жаба она такая 🙂
А функционал будем наращивать! Планов — громадье)
И, надеюсь, задавим Вашу жабу объемом возможностей!
(10) готов. Пишите на мыло. Мой профиль e-mail в скриптах думаю найдете 🙂
(12) pumbaE,
Отлично! Завтра Вам напишу.
(14) artbear,
Если обработка не полезна, то ей нет места ни в платном разделе, ни в бесплатном.
…
Посмотрим как это получится объединить со СНЕГОПАТОМ.
…
Возможно эта обработка через некоторое время станет продуктом лайт (то есть демкой, то бишь бесплатной).
А платной станет конфигурация, с большим функционалом.
Вопрос только сколько будет стоить эта конфигурация 🙂
Поэтому есть смысл купить обработку сейчас, что бы потом не платить больше.
Равно как и есть смысл подождать, когда обработка станет бесплатной.
Решение за вами!
Ждем бесплатную)
мне кажется актуально только со снегопатом, а пора Снегопат 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) Геннадьевич,
(47) pumbaE, Спасибо, но вроде писали что эта разработка бесплатна.
(48) Геннадьевич, эта разработка да — бесплатна, а инструмент платный.
Спасибо 🙂
Спасибо!
(0) Вот что обнаружил: в форматной строке с разными локалями делается перенос после первой точки с запятой. В результате появляется разрыв строкового параметра и синтаксическая ошибка.
Пример:
разбивается на несколько строк и производится выравнивание знака равенства по самой длинной строке в блоке, добавляя 139 пробелов:
Я думаю, что в блоке поиска перевода строки по точке с запятой надо смотреть на парность кавычек.
не хватает выравнивания по запятой
Не большой троллинг.
А так автору спасибо.
(53) break, поддерживаю.
Пробовал нарисовать такое, да где-то прокол вышел — они потом все равно переформатируются.
(0) Что еще заметил: обработка режет большие комментарии — закомментированные блоки или текстовые описания и пояснения.
Рад, что обработка оказалась полезной. Прошу прощения за долгое молчание — загруз на работе.
Ошибки и недочеты безусловно есть, но как часто бывает, нет времени их устранить, тем более, что после написания обработки стал писать код сразу правильно :))
Если у кого есть желание дописать обработку — welcome! Могу опубликовать обновленную версию у себя, можете выложить ее в своем блоге — ссылку на обновление здесь размещу.