<?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='\
Даже нет слов!
Мог бы и 10+ поставил
одна из полезнейших разработок!
При сравнение 2-х конфигураций:
Извините, видно вспышка газа на Венере и в результате преломления лучей солнца, мне ударило в голову и я получил такую ошибку…
Если серьезно, еще несколько раз попробовал все работает четко.
Очень нужная разработка, спасибо. От меня +
мощно, спасибо
Нужная вещь
2 раза Супер!
Обязательно надо
Вообще-то функциональности стандартной обработки сравнения и объединения конфигураций во многом хватает и даже где-то удобней и быстрей. Единственное прекрасное незаменимое — это сравнение печатных форм. За это спасибище!
Архиважная вещь, большое спасибо за полезную разработку.
( 8 ) WendyH , +1 . Стандартный вполне функционален и удобен . А вот за сравнение форм — действительно плюс !
(8) Подскажите, а как получить сравнение печатных форм? Ну никак не получается.скрин
Спасибо!
(11) pumbaE, спасибо Вам за скриншот — сразу стало видно, что с привязками имеет смысл еще поработать — а по поводу макетов печатных форм — просто по умолчанию работает режим:
Сравнениефайлов.СпособСравнения=СпособСравненияФайлов.ТекстовыйДокумент;
При попытке показать различие в табличном документе, он вызывает исключение — а при вызове исключения там ищется файл text (как для модулей объектов). Просто не предусмотрел потребность в сравнении табличных документов. Макеты-то сами из дерева объектов можно вызвать по-одиночке. Согласен, надо доработать. Вот, по поводу фильтра Вы мне тоже сказали, глюк с привязками показали — отдышусь — и все исправлю.
(11) pumbaE, привязки и обработку сравнения табличных документов исправил — смотри рисунок к сообщению и новый скриншот к публикации.
Отличная работа! Но я так и не понял, в чем отличие от стандартной? Расскажите, пожалуйста, как вы ей пользуетесь? Какой сценарий работы применяете?
(15) amiralnar, стандартный функционал ограничен сравнением конфигураций (и файлов конфигураций) и работает в режиме конфигуратора. Моя обработка работает в режиме предприятия и способна сравнивать и анализировать файлы конфигураций, а также — в отличие от стандартной — файлы обновлений и обработок. Сценарии работы каждый выбирает по мере своих потребностей — удобно анализировать приходящие обновления, есть возможность детально проанализировать изменения в формах (эта возможность отсутствует в стандартном функционале). Работает медленно — много анализируемой информации. Но я не предлагаю Вам запускать ее каждый день — только по мере необходимости. Для часто анализируемых файлов — в случае, когда изменения в них нужно смотреть «в несколько подходов» можно не запускать каждый раз распаковку — создать для них постоянный каталог на диске и при случае просто вызывать этот каталог для вывода информации из него — тогда получается быстрее. Ничего сложного и заумного там нет. Все прозрачно и понятно.
(16) Спасибо за ответ!
Сравнение обновлений может быть полезно для принятия решения о перепрыгивании через версию.
Сравнение обработок доступно через стандартный диалог сравнения файлов: Меню «Файл — Сравнить файлы»
Поясните, пожалуйста еще один момент:
На данный момент в стандартном функционале доступны следующие действия:
— открыть старую форму
— открыть новую форму
— вывести различия между формами в табличный документ (немного неудобно, но задачу поэлементного сравнения худо бедно решает)
Какая именно возможность отсутствует в стандартном функционале?
Ну — считайте, что про сравнение обработок вы меня просветили (стыдно). Да и отчеты о сравнении в стандартном функционале, не спорю, побогаче. Но, Вы ведь понимаете, что все мы занимаемся одним общим делом — пытаемся разобраться… У каждого это происходит по-своему — кому-то нужно написать такую обработку для того, чтобы что-то расставить по своим местам. И, может, если это, все-таки, дает какие-то видимые результаты, оно к лучшему?
(18) Как я уже отметил, вы проделали отличную работу, я нисколько не умаляю важность вашей обработки.
Мне было важно узнать, какое преимущество она имеет, как её можно использовать в работе, вот и все.
Спасибо!
очень круто. Спасибо
Гениально) … а нет ли возможности выводить размер файлов в колонке … у меня, например, «раздулась» конфигурация КА мегов на 150 после всех обновлений, а как найти из-за чего, пока не нашёл возможности … а так было бы наглядно видно, какие объекты конфигурации сколько места занимают….
Или же это уже есть в этой обработке?
Если то, что нарисовано на картинках правда, то ОГРОМНЫЙ респект и уважуха автору.
(21) Pavel777777, в навигаторе файлов есть кнопки, перемещающие Вас в каталог распаковки — делаете в этом каталоге сортировку по размеру файлов и определяете, в чем у вас проблема. Наверное, так.
(23) Ясно, спасибо … но тут есть два момента ))) во-первых — названия файлов не совсем понятные сходу), а во-вторых — многие объекты расположены в папках, поэтому размер сразу не показывается. В принципе, это, конечно, можно прикрутить и самому…
Разработка весьма полезная, если не сказать очень полезная,Стандартные механизмы не позволяют анализировать формы и макеты, бывает сложно понять что же изменилось.Отличная работа.+
Здравствуйте. Огромное спасибо. Могу ли использовать в своих исследованиях-разработках? Со ссылкой на Вас, разумеется.
Я не против.
(0) можно ли с помощью вашего инструмента увидеть код в модулях, не включенных в поставку?
(28) Rustig, нельзя.
Спасибо большое, очень меганужная штука!
(29) Спасибо 🙂
есть своя разработка, код модуля не включен в поставку, поэтому вот спрашиваю — анализирую: достаточна ли защита? …обфускацию кода делать не хочется (имхо, трудоемко)
Круто!
Спасибо. Плюс за огромную проделанную работу, полезная вещь для кодеров и к сожалению бесполезная для юзеров 1с.
Как тока времени хватает писать такое для себя любимых
Обязательно скачаю, спасибо!
К сожалению, на данный момент, обработка несовместима с подсистемой«Инструменты разработчика» . В общем модуле ирГлобальный есть функция
из-за этого при попытке анализа формы возникает ошибка
Думается мне, что при заимствовании чужого кода, префиксы все-же лучше менять.
(35) awa, спасибо за совет. Признаю, исправлюсь. На счет заимствования чужого кода — вообще сложный вопрос — насколько это допустимо. Поэтому и не хотелось изменять характерные признаки, для сохранения сходства с оригиналом.
(36) Префикс Лкс был выбран специально на основе анализа вероятности встретить его в коде в другой роли. Поэтому достаточно просто сделать замену всех вхождений «Лкс» на свой префикс. Несовместимость с подсистемой ИР для многих станет очень неудобным фактором.
++
(36) Насчет допустимости заимствования чужого кода — если бы автор (в данном случае уважаемыйtormozit ) не хотел бы допустить копирования своего кода, то не выкладывал бы его в открытом виде, или четко написал бы в публикации и в самом коде о нежелании использования своего кода другими. Повторное использование кода — вещь, безусловно, полезная. Я думаю, что при копировании чужого кода префиксы можно и нужно менять, а в комментариях просто оставить информацию об авторстве кода и ссылку на источник.
Авторы +10, классная разработка, молодец.
Работа, видимо, проделана немалая, поэтому плюс. Кстати как правильно подмечено в (17) многие пользователи (да и разработчики) не используют Меню «Файл — Сравнить файлы», хотя вещь действительно очень удобная. Америку не открою конечно … вот для чего это нужно программистам понятно, а вот для бухгалтеров, например, она становится незаменимым помощником при «анализе обороток» (проводок), когда хочется понять что изменилось в оборотке за период или вообще что изменилось в проводках отдельного документа после его перепроведения. Работает это примерно так:
1) Бухгалтер открывает проводки документа любимой кнопкой «ДтКт».
2) Жмакает правой кнопкой по полю с проводками, выбирает «вывести список», получает печатную форму, и сохраняет ее на комп в формате по умолчанию MXL (файл1.mxl).
3) Перепроводит документ, заходит в проводки и также как в пунке 2 создает файл файл2.mxl
4) Меню «Файл — Сравнить файлы», выбирает файл1.mxl и файл2.mxl
5) Видит что изменилось.
То же самое касается «обороток», когда «что-то изменилось, а что не пойму». По крайней мере у меня бухгалтера очень ценят данную возможность сравнивать файлы.
(41)Вы ещё крыжите? Вывести список и Сравнение файлов в помощь обыкновенному пользователю. от anig99
Да, это то, что было бы очень полезно иметь в своём арсенале инструментов. Большое спасибо и, конечно, «+».
(35),(37),(39) Обновил. Добавил в код комментарии со ссылками на изначальные источники. Убрал префикс Лкс из трех функций анализа документа DOM формы.
Обработка супер! Спасибо!
Спасибо огромное. Проделана большая и нужная работа.
Разработка полезная автору плюс
(0)сравнение УПП-УПП cf windows 7 проф
{Форма.Форма.Форма(1512)}: Индекс находится за границами массива
СтрокаСравнения=ДеревоМетаданных.Строки[0];
а перед этим надпись результат распаковки не является результатом распаковки файла конфигурации
(51) iov, эта надпись появляется, когда что-то напутано с каталогами распаковки. Создайте для каждой конфигурации свой каталог распаковки (который не будет удаляться при закрытии обработки) — попробуйте еще раз. Напишите, если не получится. На сравнении cf УПП проверялось. Было все в порядке.
+52 (51)Распаковать и вывести. Не просто Вывести
(52) два разных каталога
УПП допиленная и УПП типовая — указаны каталоги распаковки
допиленная — загружается в пустую базу без ошибок (по крайней мере не найдены пока)
на допиленной вылетает. причем сразу же при запуске.
Типовая — без проблем.
(53) Конечно распаковать и вывести.
(52) Сейчас попробую выгрузить опять и проверить…
(54) iov, УПП на платформе 8.2?
(51) iov, сообщение «Результат распаковки не является результатом распаковки для файла конфигурации» пишется, если в каталоге распаковки отсутствует файл root
Структуру файлов каталога распаковки посмотрите, пожалуйста. Обычно, при сортировке файлов по имени там в самом низу должно быть три файла — root, version, versions
(56) естессно…
вылетает практически сразу после нажатия. так что в каталоге распаковки даже ничего не появляется
Хотелось бы разобраться… А Вам не трудно из командной строки запустить что-то вроде:
V8Unpack.exe -parse [ПолныйПутьКФайлуРаспаковкиВКавычках] [ПолныйПутьККаталогуРаспаковкиВКавычках]
В каталоге с программой V8Unpack.exe и zlib1.dll
Получится что-нибудь?
(59) UnpackToFolder. Error in reading file!
(59)файл не заблокирован — перемещал на разные диски — типовая распаковывается доработанная — нет
(60) iov, от имени всей медицины ничего Вам сказать не могу. Но V8Unpack.exe — это не совсем мое. Хотелось бы думать, что выход найдется. Наверное, об этом надо написать в комментариях к соответствующей публикации.
(62) В любом случае спасибо за участие. попробуем добиться истины в других местах.
Отличная обработка, дерзайте! Ждем доступных версий.
Das ist fantastish!!!
(8) WendyH, по мне так для сравнения печатных форм стандарта за глаза хватит, но вот визуальное сравнения форм — это жемчужинка, которой всегда хотелось!
отличная обработка, качну ,спасибО очень нехватало такого в вид дерева сравнения форм и печатных формочек!
нужная штука
Надеюсь 1Су теперь станет стыдно, и они реализуют это в платформе =)
Здравствуйте!
Скажите, пожалуйста, знакомились ли вы с методом динамического добавления элементов формы от TormozIT?
Как вы думаете, возможно ли в вашей обработке написать функцию, которая по информации о сравнении форм — сгенерирует код для динамического добавления элементов на форму?
(71) amiralnar, эта функция в обработке и так есть — в слегка непричесанном виде, согласен — при нажатии на гиперссылку с синонимом формы выводится текст для динамического добавления элементов формы — в случае сравнения — сравнение этих текстов динамического добавления. Задачи сформировать отдельно именно текст изменений одной формы от другой не ставилось — хотя, по-моему, это не сложно. Сильно восхищает предложенный формат подачи нужных изменений в обработке от Istur — у него более специализированная обработка, может, он возьмется ее слегка развить?
хорошая обработка
(74) petrov_al, пользовательский режим используется для вывода только потому, что других способов вывести для анализа нужные данные еще не знаю. Аудиторию бухгалтеров и операторов баз данных охватить в мои планы не входило. Конфигуратор, конечно, нужно еще подучить. Но альтернативные методы получения нужной для анализа информации тоже должны быть изучены.
Однозначно одна из полезнейших разработок…
(72) Большое спасибо за подсказку на обработку! Это как раз то, что мне было нужно.
Полезно. Спасибо
Приятно видеть такие разработки 🙂
А про объединение ещё не думали? Как замену функционалу конфигуратора?
(79) Magister, ридер — от слова «читать». Подразумевалось, что те, кто ищет альтернативный разбор форм — как Вы в своих комментариях к CFU-ридеру, найдет для себя что-то подходящее. Замена конфигуратору не планировалась.
(80) Понял, спасибо за ответ.
спасибо, отличная разработка
Спасибо, очень полезная вещь.
Отличный и удобный механизм. Очень помогает когда есть множество изменений в форме. Спасибо.
видно, что проделана большая работа, но не повторяет ли механизм этой обработки, механизм сравнения конфигуратора???
(85) svbel85, на самом деле — такая видимость действительно имеет место быть. И если у Вас нет потребности расширить имеющиеся механизмы и развить их в нужном для Вас направлении — обработка не для Вас. На возможности сравнения форм конфигуратором Вы, к сожалению, повлиять не сможете, а тут — проявить немного фантазии и… может быть, узнаете что-то новое для себя.
Сравнениефайлов.СпособСравнения=СпособСравненияФайлов.ТекстовыйДокумент;
При попытке показать различие в табличном документе, он вызывает исключение — а при вызове исключения там ищется файл text (как для модулей объектов). Просто не предусмотрел потребность в сравнении табличных документов. Макеты-то сами из дерева объектов можно вызвать по-одиночке. Согласен, надо доработать. Вот, по поводу фильтра Вы мне тоже сказали, глюк с привязками показали — отдышусь — и все исправлю.
Разработка весьма полезная, если не сказать очень полезная,Стандартные механизмы не позволяют анализировать формы и макеты, бывает сложно понять что же изменилось.Отличная работа.+
Супер экономии времени при обновлении. Спасибо!!
Экономия времени при обновлении. Спасибо!!
Спасибо, очень помогло. а дальнейшее развитие будет ?
(91) Usc, конечно, было бы здорово довести дело до чего-то более практичного. То, что требует простой доработки напильником — будет реализовано в ближайшее время. Мне пока что не определиться с тем — в каком виде будет получаться информация на выходе. Поможете в этом «ступоре идей»?
Оболденная вещь, спасибо большое
Вариант: пустая база анализирует параметры командной строки и допустим если передается 2 пути к файлам выводить их diff (erf, epf, mxl) неважно. В этом случаи можно для svn написать скрипт, что эти файлы сравнивать с помощью определенной программы.
Особенно будет прикольно для клюшечников — посмотреть визуально различия в mxl файле…
хорошая весчь спасибо
Спасибо
Ну с удовольствием бы протестировал функционал и поставил плюс и содержательный комментарий. Из за этого ретинга приходится всякую ерунду писать что бы скачать обработку. Неужели инфостарту это реально нужно?
Дошли руки попробовать. Задумка очень нравится, но произошло: {Форма.Форма.Форма(1111)}: Значение не является значением объектного типа (ВидМетаданных)ВидМетаданныхОбъекта=СтрокаДереваМетаданных.ВидМетаданных;
Это выдала машина. В чем может быть причина? Пытался просмотреть свою конфигурацию УПП, но измененную
(99) владимирп, единственное, что приходит в голову — это то, что в конфигурациях с версии 8.2.14 появились новые виды метаданных — обработка их еще не учитывает. Буду работать в этом направлении.
(3) BalVlad,
очень нужная вещь
(31) Rustig, защиты на основе исключения модулей в комплект поставки не достаточно. На основе V8Unpack была не известным мне автором разработана обработка — декодирование модулей V8. Эта обработка прекрасно вскрывает и декодирует модули с «псевдокодом». Таким же образом обходит установленные пароли на текст.
Дабы не совсем offtop 🙂 Автору МЕГАРеспект! Я давно искал алгоритм + механизм разбора и формирования дерева конфигурации из файлов после V8Unpack.
Есть идея реализовать свой собственный (на базе 1С) SVN-чик с функциями автоматического документирования на основе комментариев. Шаблоны для документирования уже готовы и успешно используются в кодировании, а вот с разбором программного кода сервером при добавлении новой версии в хранилище — затык. Конфигуратор может выгружать только всю конфигурацию в текстовые файлы, и не может выгружать отдельные объекты из конфигурации или внешние обработки или отчеты. А из поставленной задачи это основное.
Еще раз — автору МЕГАРеспект.
(60), (62)
<< от имени всей медицины ничего Вам сказать не могу. Но V8Unpack.exe — это не совсем мое. Хотелось бы думать, что выход найдется. Наверное, об этом надо написать в комментариях к соответствующей публикации.
>>
автору спасибо за труд.
НО! архитектура решения жестко завязана на V8Unpack, что не даёт легкого простора для перевода на другие решения (в свободном доступе есть как минимум ещё 2 решения для получения аналогичного результата)
P.S. автору V8Unpack писать бесполезно разработка не поддерживается и передана сообществу.
P.P.S.если у кого не распаковывается V8Unpack-ом приму на изучение другими инструменами.
«Тут, эта, как его, не работает, начальника». В части «анализ и сравнение ролей и ограничений доступа» при нажатии на кнопки перехода «Различия в ограничениях доступа (4):» выдаёт вот такое сообщение:
PS: И можно, что нибудь с реквизитным составом сделать, а то СтандартныйРеквизит, тяжело понимается.