<?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='\
Почему F7 — удалить? А F8 — создать каталог?
Действительно, F7 и F8 лучше поменять, на автомате можно и лажануться, кто привык к Тотал коммандеру зачастую пользуется клавиатурой
Удобный инструмент, если номенклатура разветвленная и надо ее реорганизовать или дополнить схожими позициями.
(1) +1 я точно не туда ткну.
Да, действительно я промахнулся))). Выгрузил новую версию обработки. Скриншоты завтра изменю. Всем скачавшим в ближайшее время вышлю ссылку на новую версию обработки
(3) Dyganov, Спасибо за отзыв. Проверьте почту- скоро Вам тоже пришлю обработку)
Во, теперь попёрли коммандеры… Чем ваш отличается от предыдущих?
(6) Yashazz, Основным «идейным» вдохновителем для меня явился «Тотал коммандер для 1с» (ссылка в самой публикации). То, что я описал в достоинствах, как раз я не нашел в том коммандере. Вы можете скачать и посмотреть мой коммандер — не понравится, напишите что и почему — верну обратно Вам 1$m. Понравится — буду рад. В любом случае любая обоснованная критика будет мне полезна
Отличная обработка. Однозначно плюсую. Бухам понравится
(4) Хорошая инициатива
(9) 99-9999, Спасибо,Спасибо)
Что еще можно добавить/изменить в данной обработке?
(11) например, прикрутить полнотекстовый поиск.
(12) Armando,думал, но в итоге отказался. т.к. единовременно работа в одном справочнике, то обычного поиска в пределах этого справочника вполне достаточно, достаточно выбрать нужный реквизит. Можно, конечно, сделать возможным поиск по нескольким реквизитам одновременно. Спасибо. Подумаю.
У меня вопрос вообще ко всем подобным блокам: что полезного можно выкрутить из двух панелей, кроме перекидывания между папками и сравнения? Лично моя фантазия на этом кончилась.
(14) Yashazz, В принципе только это и нужно.Попробуйте привести в порядок тот же справочник «номенклатура», который велся всеми.
Оригинальная идея, обработка однозначно «must have»
Пригодиться в копилку)
А добавить можно групповое переименование и сравнение папок
(18) hasan-rusel, Прекрасная идея. На досуге подумаю
Спасибо большое! Еще можно прикрутить сохранение настроек в хранилище, чтобы после закрытия в следующий раз открывать с предыдущего места.
(20) dedicated, Спасибо за совет, непременно в ближайшее время им воспользуюсь.
а прикрутить можно вот что.
1) Отметка галками множественная по кнопкам (все все снять инвертировать )
2) отбор по вхождению строки
3) лог действий. (возможность записи в журнал)
4) отмена действий (о да и такое видел)
5) фильтрация по сложным условиям (яля отчет только с возможностью отметить галками необходимые элементы)
6) соответственно групповая обработка по галкам или выделению (банально вызов групповой обработки типовой с заполнением)
7) печать структуры выделенных.
Еще один коммандер… Свой что-ли написать 😀
(22) iov, п.2 реализован. Над остальным задумаюсь
(23) DrAku1a, было бы интересно потом сравнить)
Как насчет кнопки Заменить(Объединить).
(26) ATrade06, Напишите, пожалуйста, подробнее (в личку либо здесь) что Вы подразумеваете. Немного не могу понять идею(( Такими темпами в ближайшее время выйдет версия 2.0). Все скачавшие сейчас смогут в дальнейшем скачать обновленную версию бесплатно
Alt + F7 (поиск) не помешает добавить, когда справочники большие.
(28) bulas, поиск есть (в правом верхнем углу). Добавлю сочетание клавиш. Спасибо
удалить удаляет или пометку ставит? может отметить это как-то на самой форме?
(30) rasswet, Ставит пометку на удаление! когда Вы нажмете F8 система Вас предупредит о том, что будет установлена пометка на удаление. Думаю гораздо проще и быстрее будет потом удалить помеченные на удаление объекты, чем восстанавливать ссылочную целостность (если объект будет удален сразу, без контроля)
Очень симпатичненько. Не плохо бы добавить на хоткеи стандартные функции (хотя бы частично) с универсальных обработок: поиск дублей, переименование, перенумерация, групповая обработка … Если эргономично вместить в интерфейс — можно было бы продавать 🙂
В любом случае плюс. ВОт накоплю СМ и скачаю ))
При попытке добавить доп. колонку в справочнике статьи затрат (Бух 8.2 для Украины) пишет
{Форма.Форма.Форма(44)}: Ошибка при вызове конструктора (ОписаниеТипов)
ЭлементыФормы.ЛеваяТЧ.ТипЗначения = Новый ОписаниеТипов(СпрСписок);
по причине:
Недопустимое значение параметра (параметр номер ‘1’) (СправочникСписок.Статьи затрат)
В принципе то же происходит с другими справочниками (номенклатура и контрагенты — работают корректно)
Жалко что отбор и сортировку нет возможности делать по доп. колонкам.
При отсутствии элемента, кнопка удалить перестает быть активной (что корректно), а просмотр и копировать — остаются активными. При попытке нажать на просмотр в этой ситуации приводит к ошибке:
{Форма.Форма.Форма(172)}: Значение не является значением объектного типа (Ссылка)
ОткрытьЗначение(ТекСтрока.Ссылка);
(36) — актуально и для УТ для Украины
Еще можно было бы в опции вынести что то типа — «Не спрашивать действительно ли я чего то хочу». Если в корне много реквизитов — каждый раз отвечать не камильфо 🙁
(36) Rad90210, исправил обнаруженные ошибки, обработку пересылаю на почту повторно для дальнейшего изучения.
Поиск по дополнительным колонкам делать можно. Сортировку включать не стал, т.к. на одном из форумов сотрудник 1с написал, что по не индексируемым полям сортировку делать не рекомендуется (как-то так)
(40) Rad90210, Изначально дополнительные колонки в отборе не делал, т.к .посчитал что поиска будет достаточно. Думаю стоит добавить
В ЗуПе просмотр для справочника Контрагенты:
{Форма.Форма.Форма(178)}: Ошибка при вызове метода контекста (ЗначениеЗаполнено)
Если ЗначениеЗаполнено(ТекСТрока) Тогда
по причине:
Проверка мутабельных значений на заполненность не поддерживается
это в исправленной версии. для предыдущей — все гуд.
(42) Rad90210, понял. исправлено)
А чем отличается от «Тотал коммандер для 1С» ?
В Total Commander есть функция сравнения файлов. Прикрутите тут такую фичу
http://infostart.ru/public/152745/
(44) DAnry, отличается тем, что я описал в достоинствах
(45) CratosX, для чего сравнивать файлы? обработка работает со справочниками. если только сравнивать два элемента справочника (смотреть чем различаются реквизиты)…
А почему перепутаны горячие клавиши F7 и F8?
обычно F7 — создать каталог F8 — удалить
(48) leshiy26, Изначально было перепутано — об этом написали, и я сразу исправил в обработке, но скриншот не получилось поменять. Сейчас изменил скриншот
Еще одна похожая разработкаhttp://infostart.ru/public/65473/ Data Commander, я б сказал даже покруче. Например источником данных может быть запрос, также есть опция установки произвольных значений выбраным елементам и т.д.
(50) DAnry, если тут на сайте поискать я думаю много найдется.
Инетересно для работы с большой базой например торгового центра или холдинга.
(54) Nebiros777, На это и рассчитано.