<?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='\
Товарищ, а расскажите, как сумели засунуть в обработку др. обработку и библиотеку? Оч. интресно знать.
(1) На самом деле там даже 2 уровня вложенности. В сумме portable-пакет состоит из 5 вложенных обработок и 1 библиотеки. Процесс засовывания/высовывания довольно подробно разжеван мной здесь:http://infostart.ru/profile/1782/projects/600/
Да, просто конфетка, супер. А можно расширить функционал? Думаю, что более востребованной функцией будет не очистка чего л. в файлах параметров пользователей одной ИБ в целях экономии пространства, а запись нового / изменение значения старого параметра (ну, например, простейшая замена значения сохраненной переменной) для нескольких однотипных ИБ и для всех пользователей.
(3) Да, я собираюсь расширить функционал. Если по мелочи — то немного подработать интерфейс (сделать собственный мини-редактор файлов-шаблонов; сделать просмотр параметров не в том виде как они храняться, а в исходном если это возможно; сделать редактирование параметров; можно сделать и групповую установку значений параметров). Если по крупному — то пишу сейчас распаковщик-анализатор модулей конфигураций, с целью определения, в каких конкретно объектах метаданных используется тот или иной параметр.
Прям красота какая-то! +1
(3) Забыл добавить: обработку нескольких баз одновременно считаю нецелесообразной, больше усложняющей и загромождающей работу с обрабокой. При работе с одной базой можно скажем установить единое значение параметра всем пользователям сразу, а вот при работе с несколькими базами — не всегда — если значение представляет собой ссылочный тип «справочник», «перечисление», «документ» и т.д.
Первое впечатление — ОТЛИЧНО! Еще поковыряю — мож замечания появятся….
Обработка сделана мастерски! Только вот название у нее непонятное и цель использования.
(8) Насчет названия — может быть. Я сам уже в терминологии запутался немного, надо причесать свои мысли и текстовки.
А вот насчет цели использования… Сейчас приведу простой пример.
Есть у меня клиент, который давненько ведет учет в единственной локальной базе «Бухгалтерский учет». Засчет разрастания файла 1cv7.cfg открытие/закрытие некоторых окон достигает нескольких минут. Лично мне надоело ждать каждый раз по 5 минут, пока откроется окно «Регламентированные отчеты», во время моих сеансов к клиенту, а уж клиенту-то как надоело… В конце концов сделал в базе еще одного пользователя, с пустым 1cv7.cfg. На нем база разумеется летала. Сказал клиенту — хотите быстро — заходите под новым пользователем. В результате обнаруживаю что продолжают пользоваться старым. На вопрос — почему — узнаю что слишком много различных настроек теряется под новым пользователем — это и различные сохраненные каталоги, и настройки отчетов/обработок, настройки документов/справочников и т.д. Все это восстановить клиенту геморно, а я уж и подавно не знаю всего того чем он пользуется. Вот потому-то тупое удаление файла 1cv7.cfg (равно как и создание нового пользователя) чревато негативными последствиями, хотя и решает проблемы скорости. Выборочное удаления части параметров из файлов 1cv7.cfg решает проблему скорости и в то же время сохраняет все настройки, кроме деактивированных (да и деактивированные можно в любой момент восстановить).
Выложил я исходники всех обработок, входящих в состав пакета, чтобы долго не копать. Есть там интересные наработки, особенно по регулярным выражениям (на них у меня и парсинг построен, и фильтрация). Возможно кому-то интересно будет.
Работает! и отлично работает 🙂
Очень полезная вещь!
(8)>вот название у нее непонятное
А ведь прав! Переобзови на что-нить типа «Оптимизация структуры файла 1cv7.cfg»
«Редактор значений пользователя в 1С7.7»
Я вижу здесь уже открыт конкурс на лучшее название… 🙂
А это приватная драка, или всем можно поучаствовать?
Вот если объединить (13) и (14), то просто и лаконично: «Редактор cfg».
Чем проще название, тем легше в поиковике найти, ИМХО.
Я сегодня добавлю возможность редактирования самих значений, и пересмотрю всю терминологию как в самой обработке, так и в описаниях и названии. Хотелось бы, чтобы с одной стороны название отражало основной функционал обработки, с другой стороны было доступно для осознания простым пользователям, не знакомым с механизмом хранения значений 1с. Поэтому просто «редактор 1cv7.cfg» не подойдет — многие просто не поймут для чего его нужно редактировать.
(17) Давай рассуждать лигически (я ж никогда не пьянею :-)): Если не поймут для его нужно редактировать, то и нафиг им этот иструмент? Это же как обезъяна с гранатой: фиг угадаешь где уронит…
(17) А зачем: как раз перенеси в описание сво
+(19) блин, нажал что-то…
свой пост (9)
(17) А ведь Абадонна дело говорит. Пост (9) действительно многое проясняет.
+(19) А что сейчас наваял в описании переноси в readme — ему там самое место 😉
ООО!! зачетная вещь, давно такую хотел — просто чтобы была! и сделано аккуратно!
зачет несомненный!
Сделано профессионально !!!
Молодец! Вещь!
Я как раз об этом думал, на днях поискать подобную программулину если она вообще есть.
Как раз вовремя сделал.
Надо будет почистить свою базу после моих экспериментов по сохранению значений.
И естественно плюс за это.
Просто здорово. Причем полезность обработки, лично для меня, является сомнительной, а вот способ реализации мммм… +
(25) Падобные обработки были, просто никто не доводил их до ума, как автор этой…
(26) Вот Именно! — способ реализации. Добротно сработано и прав (27) — пример того, как надо имено «доводить до ума», а не полуфабрикат выкладывать.
А не захвалим ли мы автора (хоть и есть за что)? Надеюсь звездной болезнью он не болеет… А всеръез: действительно очень качественная работа.
(28) звездной болезнью я уже переболел, пока тусовался на проклабе, так что это мне точно не грозит. А так по жизни я вообще много времени уделяю интерфейсу и юзабилити. Возможно в этом моя ошибка — очень много времени уходит на вылизывание работ. Вот жена моя сильно не заморачивается — ляпает как на конвейере, на интерфейс вообще кладет, о юзабилити наверно и не слышала. В результате пока я 1 клиенту конфетку мастрячу, она 5 обслужить успеет, если правда сам алгоритм не сложный. Продуктивность жены выше, а оценить красоту решения не каждый клиент может, тем более качественная реализация получается дороже. Это хорошо, когда обработка бесплатная, а когда за аналогичные решения с вас попросят 2000 и 5000 — вы какое выберете? Но по-другому я писать не могу…
МАСТЕР!!!
семь футов под килем — 10 плюсов за разработку
воооОооот моё мнение…
(29)>я вообще много времени уделяю интерфейсу и юзабилити
Полный одобрямс 😉
пока не смотрел, но так как видел, откуда выросло :), уверен, что вещь качественная!
Потребовалось для работоспособности установить scriptru и scriptru_5.7_sp3_rereg.
(33) Винда 98 что ли? Необходим Windows Script Host 5.6, он даже для работы машиночитаемых форм необходим. Обычно на WinXP и Win2000 уже стоит. Если вдруг по каким-то причинам не стоит, то надо скачать и поставить, это как бы из разряда musthave. Например с сайта ГНИВЦа (http://www.gnivc.ru/Document.aspx?id=1017) — файл по ссылке «Доп_системные_средства_MS98-2000_Печать_НД_с_PDF417». Или ищите на сайте мелкософта или в нете файлы «WindowsXP-Windows2000-Script56-KB917344-x86-rus.exe» или «WindowsServer2003-Script56-KB917344-x86-rus.exe» или «Windows9x-Script56-KB917344-x86-rus.exe». Но повторяю, это если еще не стоит, мелкософт сейчас во все дистрибутивы виндов по умолчанию эти библиотеки засовывает, так что 99% что у вас это уже есть. Возможно, в какие-то пиратские сборки виндов не включают для экономии…
(34) Из ссылки скобки уберите.
Только что почитил конфиги клиента на типовой БУ, размеры этих файлов были от 2.5мб до 4.5мб. То-то думаю, че это бухгалтерия на двухпроцессорном ксеоне так тормозит… За недостатком времени очистил только от параметров «РеглОтчетНастройка*», тем не менее размеры конфигов сократились в 20 раз — база залетала.
Я со всех отчетов убираю панель инструментов, фиг они у меня насохраняют особо 😉
Только то, что я посчитаю нужным
(37) А это неважно. Настройки списков регламент.отч. 1с сохраняет автоматически, независимо от того хочешь ты этого или нет, и именно эти настройки в основном грузят бухгалтерию.
(0) Сань, цени: завел под твои разработку папку «Маляев» 😉
До этого были только «АЛьФ» и «Abadonna» :)))))))))))))
(39) Круто. И сколько их в моей папке? Или ты с расчетом на будущее? Надо изучать восьмерку, чувствую себя динозавром… 🙁
(40) Конечно, с расчетом! Щас пока только эта замечательная штука там 😉
Хм… Надо будет тоже папку завести…
(36) Вот вот, и я о том же. Пора усовершенствовать выполнение для нескольких выбранных баз (как в этом примере, — десятка-два типовых бухий)
Я попробовал, — прога настолько сделана удобна, что добавления кода для этой фишки минимальны. Зато, насколько быстрее, — одним махом все типовые…
(6) не для присваивания, а для обычной очистки параметров содержание ссылочных значений не критично, и для нескольких баз, думаю потянет.
Изменения передал автору, как он решит, имхо.
(43) не, если тока для очистки то можно.
Обновил версию. Основные изменения:
1. Исправлен баг, приводящий к вылетам 1С, если размер одного параметра превышал 500 килобайт (мне на тестирование присылали файл, в котором один параметр был размером 7 мегабайт).
2. Теперь можно обрабатывать несколько баз одновременно (хоть все имеющиеся — скорость приемлемая).
3. Сделал мини-редактор файлов выражений фильтрации со специальным удобным функционалом.
Спасибо!
Круто. Но не хватает кнопки «Удалить архивы» т.е. все файлы 1cv7.cfg_ или я ее не вижу… И желательно для выбранных баз.
Буквально вчера нужна была обработка. У клиента файл здоровенный а компьютеры слабенькие. Плюсую.
Скажу за себя (адинистртора) и за нашего 1С разработчика (за вложения один в один + дллка, тобиш за сорцы)
+1
то (10) — мне интересно, ща как раз стоит задача при подключении через ОЛю к нескольким базам прописывать сохраняемый параметр «НеЗапрашиватьПодтверждениеПриВыходе». Попытался, было, тупо заставить ОЛю выполнить бач: СохранитьЗначение(), но эта коза не хотит ничего писать. Вот теперя ищу возможность редактировать cfg — файлу
кстати, классно ты список баз читаешь — я только додумался через текстовый файл получать — до объектов не дозрел. Еслиб было можно, еще б плюсов понаставил ;)))
Раньше просто удаляла этот файл, бухи ворчали, но… А теперь — красота!
1. А можно как-то скопировать в буфер обмена наименование сохраненного значения? Да и имя пользователя не помешало бы. (Может выводить их в таком же окне, как и само значение?)
2. При нажатии кнопки «Записать» обновляются файлы 1cv7.cfg и 1cv7.cfg_ даже если изменений не было. ИМХО, это не хорошо. Во-первых время на запись тратится, во-вторых даты файлов меняются. Мне, например, по файлу 1cv7.cfg удобно определять дату последнего входа пользователя в базу.
Спасибо за обработку.
Работа 1С существенно ускорилась, а полезные данные не потерялись.
Не хватает очень хоть какого-нибудь просмотра значений, или я не вижу?
Отличная работа!!!!
Спасибо за разработку, давно уже плюс ставил и использую. Но вот понадобилась возможность копировать сохраненные значения от одного пользователя к другому и добавлять значения хотя бы примитивных типов. Может Вы сможете добавить такую возможность? С уважением …
Сделать можно всё, но извини Delf, сейчас загружен несколькими проектами одновременно, времени нет. И объясни зачем добавлять значения, когда это можно легко сделать командой «СохранитьЗначение()». Это удалять нелегко, а добавить как раз просто.
Спасибо отличная разработка!
Спасибо! То что нужно! +1!
Да, разработка реально помогла.
Хорошая обработка, надеюсь ещё многим поможет…Совет — все же описать подробнее какой из выложенных файлов что означает…
Спасибо за полезную обработку. +1
Обработка очень помогла, спасибо. Отдельное восхищение от старого семерочника за оформление внешнего вида обработки и удобства пользования. Отлично, просто отлично.