<?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 Отлично.
Очень полезная штучка. +1
Да так ничего приятненько… но нужно конечно развитие
Реквизиты и поиск ссылок… и ТД
по поиску задаю АК
точ то выводит АКтОказанияУслуг верно
а то что еще выводит контАКтнаяинформация- не очень ока мне была нужна ..
может быть искпользовать регулярные выражения *АК*_?
Еще можно список внешних обработок добавить .. как ссылку на файл так и существующие в «Дополнительные внешние обработки»
А где избранное? Что то не могу найти…
(7) Да, регулярные выражения будут очень полезны.
+ 5 Абсолютный Зачёт
(3) Да
(4) Добавил парочку
(7), (10) регекспы — однозначно! Будут.
(8) вариант. спасибо за совет. только как файл искать в нынешнем интерфейсе? добавить диалог выбора?
(9) про избранное — неправильно выразился. Есть история часто используемых команд. А оно надо — «Избранное»?
всем ометившимся — спасибо!
Еще нужна опция авторазворачивания дерева после фильтрации.
(13) Да
Также неплохо было бы сделать удаление строк последних и частых по нажатию DELETE
Очень неплохо +5
(9) — Избранное теперь есть
(13) — есть
(15) — есть. Backspace
В избранное нужно иметь возможность добавлять путем перетаскивания.
Добавление в избранное хорошо бы было доступно еще и из контекстного меню.
Картинки у планов обмена не такие же как в конфигураторе. Возьми все таки из моей версии. Там все ровно =)
Толь, наконец я добрался до сюда.
У меня два небольших предложения:
— При закрытии/открытии обработки не сохранять и не восстанавливать развернутость ветвей дерева. В своей версии я сделал «Последние используемые» и «Часто используемые» всегда развернутыми при открытии («Избранного» у меня нет), а «Справочники», «Документы» и т.д. — всегда свернутыми. Мне просто надоело сворачивать все эти ветви, когда они уже не нужны.
— Выложи версию и для 8.1, чтобы народ не мучился конвертировать.
(20) А вот и соавтор. Отличная работа.
Еще пожелания.
Сделать в избранном принудительное упорядочивание по алфавиту, либо возможность менять порядок строк (например путем перетаскивания).
Для ссылочных объектов, если у них имеется отдельная форма выбора, то в контекстном меню хотелось бы видеть 2 строки «Основная форма списка» и «Основная форма выбора», а по дабл клику как и раньше будет открываться основная форма списка. Такое поведение будет удобно для отладки форм выбора, чтобы не лазить в какую нибудь форму, где есть поле ввода с нужным типом.
Хорошо бы сделать маленькую справку, где бы была ссылка на страничку проекта и версия обработки.
Картинки у планом обмена «левые» =) Когда же поправишь?
В контекстное меню для ссылочных объектов также можно добавить «Форма ввода нового», которая будет открывать форму элемента. Полезно также при отладке форм, да и обычным пользователям может быть полезно.
Ну и общие формы наверное все же стоит добавить, т.к. обработка ориентирована как я понимаю на разработчика(?)
(18) есть
(19) добавление из контекстного меню есть
(20) есть
(21) порядок строк в избранном определяется количеством нажатий Ctrl-D 🙂 Добавил возможность сортировки по алфавиту. Установлена по умолчанию, настраивается просто
(22) через контекстное меню теперь доступны все формы объекта
(23) есть
(25) работает через выбор формы элемента или формы документа
(26) есть
(27) Отлично! Так держать.
версия 8.1
1) Пиктограммы потеряли прозрачность
2) Внешние обработки, общие формы, интерфейсы получили пиктограммы констант
По-моему было бы удобнее, если бы список доступных форм встраивался в контекстное меню при активации строки. Это ускорит доступ к формам. Сверху наверное лучше пусть идут статические пункты меню, а снизу через разделитель динамические.
(29) пиктограммы пофиксил (кроме прозрачности)))
(30) снова переписал код обработки команд, теперь формы — в составе динамического контекстного меню
Прозрачность надо исправить! Она все портит =)
платформа 8.1.10.50 при открытии версии 1.6 обработки (последняя ссылка) получаю ошибку
{Форма.Форма(1138)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания): Недопустимое значение параметра (параметр номер ‘3’) (Обработчик ожидания с нулевой задержкой может устанавливаться только для однократного выполнения)
ПодключитьОбработчикОжидания(«СгенерироватьКомандыКонтекстногоМеню»,0.1);
по причине:
Недопустимое значение параметра (параметр номер ‘3’) (Обработчик ожидания с нулевой задержкой может устанавливаться только для однократного выполнения)
Выложена очередная версия 1.7 (см upd к описанию)
(29) прозрачность была. Обнаружен баг платформы — прозрачность иконки не влияет на курсор табличного поля
(33) да, оказывается поддерживать две платформы непросто ))). Пофиксено
Скоро пофиксишь баг с динамическим контекстным меню?
(35) Баг пофиксен давно (просто убрал генерацию через обработчик ожидания).
Сегодня планирую дорихтовать выбор формы по умолчанию (по двойному щелчку) и выложу.
В свежей версии: поиск и открытие обработок по справочнику «ВнешниеОбработки».
Для версии 8.1 — полнотекстовый поиск по данным ИБ.
Версия 2.0.1.
Пофиксено:
* макеты обработок были от версии 8.0
* не работало перетаскивание в пустую папку Избранное
* Иконки внешних обработок и полнотекстового поиска
Добавлено: поиск в метаданных консолей подсистемы «Инструменты разработчика»
* ирКонсольЗапросов
* ирКонсольПостроителяОтчетов
то есть, если вы используете «Инструменты разработчика», макеты обработок можно смело удалять.
2.0.2
* Восстановлена обратная совместимость кода с платформой 8.0.
* В избранное и историю теперь попадают не только объекты метаданных, а любые элементы (кроме результатов полнотекстового поиска)
Версия 2.0.2 открытии Обработка.ирИнтерфейснаяПанель ошибка:
[b]{Обработка.ирИнтерфейснаяПанель.Форма.Форма(762)}: Ошибка при вызове метода контекста (Выполнить): {(7, 2)}: Поле не найдено «ВидОбработки.Порядок»[b]
См текст запроса
Версия 2.0.3
(40) Баг(фича?) пофиксен. На самом деле, механизм внешних обработок изначально затачивался под типовые. Но если будут пожелания, добавлю возможность настройки этого механизма в пользовательском режиме, без залезания напильником в код.
(41) Устранен баг, обнаруженный на типовой демо УПП: в сохраненных настройках была ссылка на несуществующий отчет, чего я от 1Сников никак не ожидал :-). Теперь работает.
Пожелание — Последние использованые сортировать по дате использования а не по алфавиту
А еще можно добавить настраиваемое меню (список метаданных) с собственным именем, ну и заполнение по интерфейсу 🙂
(42) ИМХО, такой случай — редкость, но пофиксил
(43) сортировка настраивается очень просто. Сделал в коде пример, см. тело модуля формы
(44) Настраиваемое меню сделал. Осталось за малым — заполнение по интерфейсу. Ждем, когда v8unpack вырастет. Ну или уж в 8.2 появится 🙂
Версия 2.1
Автозапуск, настраиваемые меню
Названия своих меню пишите одним словом, сейчас по ним идентифицируются строки настроек.
Версия 2.2
Исправлены ошибки версии 2.1
Оптимизирован код.
Устранено ограничение версии 2.1 («Названия своих меню пишите одним словом, сейчас по ним идентифицируются строки настроек. «). У статического меню теперь есть как идентификатор, так и представление.
Открыл список документов (заказы к примеру).
Перетащил в автозапуск.
Открывается при запуске форма нового документа.
При нажатии мышкой в автозапуске — открывается все ок — список документов.
(48) Спасибо, исправил
Версия 2.3
* Оптимизирован код для улучшения быстродействия
+ Объекты результатов полнотекстового поиска теперь обрабатываются статическими ветвями. То есть, можно добавить в Избранное (или а Автозапуск) определенный документ, элемент (группу) справочника, в общем, любой объект ссылочного типа.
+ Для объекта полнотекстового поиска доступно открытие любой формы, а не только формы по умолчанию
Версия 2.2
* Исправлены ошибки, найденные в версии 2.1
* Оптимизирован код для улучшения быстродействия
Добавил файл ирИнтерфейснаяПанель.epf (для тех, кто использует ее совместно с подсистемой «Инструменты разработчика»http://infostart.ru/profile/1184/projects/1274/)
Хорошая штукенция, уже использую
Предлагаю ветки «Избранное», «Автозапуск» вынести в отдельное дерево и добавить возможность скрывать/показывать
Еще предлагаю добавить кнопки для сворачивания/разворачивания дерева
Класная весч!!! +++++
Так держать… Больше версий хороших и разных:) Отличная обработка использую для ручного функционального тестирования конфигурации(создание и запись объектов, проведение документов и т.п.)
Странно, но почему-то отбор по подсистемам работает только в файле Интерфейсная панель 8.1 (там, где версия 1.5), а в версиях 2.1 и 2.3 он не работает:( либо я ещё не разобрался как оно должно работать:) Но пока буду пользоваться версией 1.5 — она меня полностью устраивает:)
Обработка понравилась. Спасибо!
в версии 2.3:
1) фильтр по подсистемам не работает
2) для регистров накопления при открытии универсального отчета (не смотря на то, что он есть) открывается форма списка регистра
3) в модуле формы в блоке «Copyright» в третьем абзаце повторение
Былобы удобно если бы состояния (свернуто/развернуто) 4-х первых секций менялось только по желанию пользователя и сохранялось между сеансами.
Отличная вещь!
Хотел предложить вариант поиска по обработкам на диске, а оказывается оно уже есть!!! 😀
При открытии или при вводе строки для поиска иногда вылезает ошибка:
{Обработка.ирИнтерфейснаяПанель.Форма.Форма(717)}: Значение не является значением объектного типа (Имя)
СтрокаОтчетаДляНастройки.Имя = ИмяОтчета;
(61) Эта ошибка вызвана изменением механизма хранения настроек. Появляется в случае нахождения сохраненных настроек отчетов в базе.
Пожелание: сохранять настройки после ввода, а не при закрытии. Ибо при перезапуске 1С из конфигуратора настройки не сохраняются
Когда будет под управляемые формы?
накосячил: добавил в автозапуск обработки её саму =).
Проблему, конечно, решил, временно отключив автозапуск в коде. Но есть пожелание, открывать обработку только один раз, а возможность открывать копии сделать в самой обработке.
(65) Учту.
(64) Скажите, а кто на самом деле уже перешел в режим 8.2?
(66) Мы например собираемся переходить. А так будет повод вплотную заняться изучением 8.2
Не сейчас так чуть позжее пригодится
Разместите пожалуста версию для 8.1, может старую даже
1С:Предприятие 8.2 (8.2.13.218)
Нажал кнопку «Проверить версию…», получил:
{Форма.Форма.Форма(380)}: Ошибка при вызове метода контекста (ПодключитьОбработчикОжидания)
ПодключитьОбработчикОжидания(«ПроверитьВерсию», 0.1, Истина);
по причине:
Недопустимое значение параметра (параметр номер ‘1’) (Процедура, указанная в качестве обработчика события, имеет неверное количество параметров)
Это так и должно быть?
АУ-У-У-У!!!! разработка закрыта?
нет перечислений…
но я для себя их добавил…
за обработку плюс. 🙂
(71) Rustig,
Разработка ведется, обновления давно не выкладывал
Пишите пожелания, учту
Отличная штука! Спасибо.
(74) ivpctotru,
Пожалуйста!
Отличная разработка! Спасибо и +
(76) BalVlad, пожалуйста )
Если есть пожелания, пишите — вполне может и учту.
Внушительная штука впечатлений много создателю 5+ так держать =)
Описание умного поиска некорректное. Поэтому я только после анализа кода понял как работает.
Правильное описание —
«Умный» поиск позволяет сразу находить нужный объект по части имени метаданных и начальным символам индексируемого поля (код, наименование и т.п.).
Например: «Реал 1777», «Номенклатура Диван», «характ кожаный».
Фоновый поиск неразумно делать для метаданных. Он разумен для поисков с использованием запросов к серверу. Правда в метаданных есть тоже опциональные запросы к БД если умный поиск включен. Поэтому предлагаю при отключенном умном поиске использовать поиск по метаданным сразу.
В контекстном меню для ссылок БД редактор объекта БД рекомендую поставить на первое место, чтобы по умолчанию открывался он
Выпущена ИР 2.44 с новой версией интерфейсной панели с доработками.
При открытии пишет ошибки:
{Форма.Форма(81,20)}: Переменная не определена (УправлениеПользователями)
Объект.ДатаНач = <<?>>УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной(«глТекущийПользователь»), «ОсновнаяДатаНачалаОтчетов»);
{Форма.Форма(90,7)}: Переменная не определена (УниверсальныеМеханизмы)
Если <<?>>УниверсальныеМеханизмы.ПолучитьНастройку(СтруктураНастройки) Тогда
{Форма.Форма(773,6)}: Переменная не определена (ОбщегоНазначения)
<<?>>ОбщегоНазначения.Сообщение(ОписаниеОшибки(), Перечисления.ВидыСообщений.Ошибка);
{Форма.Форма(829,5)}: Переменная не определена (ОбщегоНазначения)
<<?>>ОбщегоНазначения.Сообщение(«Выбранный файл не является внешней обработкой.
{Форма.Форма(79,25)}: Процедура или функция с указанным именем не определена (глЗначениеПеременной)
Если ЗначениеЗаполнено(<<?>>глЗначениеПеременной(«глТекущийПользователь»)) И Не ЗначениеЗаполнено(Объект.ДатаНач) Тогда
{Форма.Форма(81,73)}: Процедура или функция с указанным именем не определена (глЗначениеПеременной)
Объект.ДатаНач = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(<<?>>глЗначениеПеременной(«глТекущийПользователь»), «ОсновнаяДатаНачалаОтчетов»);
{Форма.Форма(86,46)}: Процедура или функция с указанным именем не определена (глЗначениеПеременной)
СтруктураНастройки.Вставить(«Пользователь», <<?>>глЗначениеПеременной(«глТекущийПользователь»));
+84 версия 2.8 для 8.1
В версии 2.8 нет или не отображаются картинки в дереве, для 8.1.
Хорошая штука, жаль фильтр по подсистемам не доведен до ума
(87) CaSH_2004, есть работающее обновление. Актуальная версия ИП — 3.1, если пользуетесь — я обновлю публикацию на инфостарте
(88)Конечно выкладывайте, я то себе доработал, но может у вас что-то получше, да и люди пусть пользуются
Добрый день, так и не обновили 🙁