<?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) Иконки из Бухг.1.6
Интерфейс радует глаз, настраивается просто и понятно.
Только вот в окне настройки объекты проще добавлять не перетягиванием а просто двойным щелчком, так быстрее для юзверя. И еще неплохо бы добавить возможность создания новых элементов, для тех объектов, которые поддерживают эту возможность.
Видео заслуживает еще одного плюса, поставлю в коментариях )))
(4) добавление по щелчку считай уже добавил
«И еще неплохо бы добавить возможность создания новых элементов, для тех объектов, которые поддерживают эту возможность.» как бы это интерфейсно реализовать чтобы не перегружать? может в список метаданных добавить Справочники (Новый), Документы (Новый) мне как то не очень понятно.
(5) Спасибо на нем я хоте показать как собственно создается интерфейс
(6) Можно использовать выбор из контекстного меню или из списка значений с пунктами «открыть форму списка» и «создать новый элемент» соответственно.
(7) Такой вариант мне как раз не хотелось использовать. Не подойдет там есть мультиперенос что делать если ты переносишь кучу разнотипных строк. Наверно добавлю в дерево с метаданными ниже, но позже. Спасибо за замечание.
Добавление по двойному щелчку есть
(9) Выбирать, что делать с объектом нужно не в форме настроек а в основной форме. В форме настроек выбирается объект а не действие над ним и переносится тоже объект.
А уже в пользовательской форме при щелчке на объекте (если над ним можно выполнить несколько разных действий) выводится меню с выбором действия. Туда (в это меню) можно добавить еще много чего, например печать списка элементов, или выгрузка этого списка во внешний файл.
Еще бы была бы возможность присваивать каждому объекту свою иконку, ваще классно было бы
Можно еще сделать:
1. чтобы можно было каждому объекту назначать другое наименование
2. создавать группы объектов
3. для ввода нового элемента (для тех которые это поддерживают) можно справа от наименования добавить гиперссылку «Новый» или в виде иконки
(12)
1 Модно в настройках
2 Можно создавать группы
————
3 Спасибо ченить придумаю
прикольная вещь, плюсую
Обновил до 1.2
1. Добавил сохранение настроек в регистр «СохраненныеНастройки» (если присутствует)
2. Добавил сохранение/загрузка в/из файла
3. Для объектов поддерживающих ввод нового (справочники, документы) добавлен пункт в контекстном меню
В 1.3
1. Добавил справку для пользователей
+
Классно: просто и со вкусом…
(17) Спасибо
В 1.4 Поправил ошибку с закладкой конфигурация и мелкие улучшения интерфейса
Могу еще идейку подбросить — запуск exe-файлов и открытие веб-страниц. Реализация несложная а удобства добавляет.
(19) можно, но я смысла не вижу. Я не собираюсь ее долго и упорно разрабатывать. Мне она нужна чтобы мне меньше мороки с интерфейсами для новых объектов. Замучали заданиями вроде добавить пользователи Х отчет Y
У меня была когда то идея создать что то типа 1C Commander (по аналогу с оболочками для Windows), да только больно уж долгая это работа.
а с регистрами накопления эта обработка не сможет дружить?
(21) а что там будет интересного
(22) можно доделать попозже
(22) даже не знаю нужну ли они пользователю
(21) Дело в том что структура данных в 1С напоминает файловую сиcтему Windows. Сравни:
логический диск — база;
каталог — справочник, документ, план, регистр и т.д.
файл — отдельная запись одного из названных выше объектов.
Даже пометка на удаление в 1С напоминает удаление в корзину Windows.
Если в Far, Norton или другой подобной оболочке в двух окнах можно открыть два логических диска и обмениваться файлами между ними то в двух окнах 1C Commandera можно открыть две базы, одна из которых текущая а другая подключена через OLE. Получается очень удобный менеджер обмена данными.
Также в эту оболочку можно насовать и множество других функций.
(25) к (23)
(25) наверно можно через UnPack, но много труда. Ведь и так открываешь два конфигуратора и переносом можно копировать метаданные
(27) Нет, это чисто для переноса данных, метаданные никак не изменяются. Например выделил в одной панели группу документов (аналогично группе файлов в Windows) и скопировал (переместил) в другую панель, где открыт соответствующий объект другой базы.
Но в общем то это слишком долгая работа, и хотя идея интересная, вряд ли я ее когда нибудь реализирую.
(28 редко нужно переносить данные, плюс интрументов только от самой 1С много. А делать просто «как Тотал Коммандере» ИМХО не нужно. Я его вообще не перевариваю
Спасибо, очень удобная обработка!
(22) 1.5
1. Добавил регистры накопления
2. Новая строка страновится текущей
Посмотрел на твой интерфейс и на еще один и доделал свой. Теперь в довесок к обычному и узкому есть вертикальный вид интерфейса.
Ссылку на интерфейс можно увидеть в моем профиле
Классно.
Предлагаю добавить команду для добавления в пользовательский список текущего элемента из списка на закладке «Конфигурация»
Штука классная, но хотелось бы иметь возможность ограничивать дерево метаданных,т.е. что бы пользователь не мог добавить объекты которые ему не нужны. Например, заполнять дерево метаданных не из конфигурации, а из интерфейса пользователя.Можно конечно в правах поотключать доступ, но объем работ увеличивается…
(35) Вопрос снимаю, в дереве метаданных появляются только объекты доступные для просмотра…
(32), (33) имеется расположение закладок позже добавлю
(34) даже не знаю, пользователь все равно сразу захочет переместить или еще чтото. Я думаю это не так пока не так важно. Спасибо за пожелание.
(35), (36) Да это описано в описании (только теперь слово доступные выделил жирным 😉 )
Извините торопился
(32) по вертикальному интерфесу… вроде все также только закладки по другому расположены
(38). Если сделать панельку пошире, а названия поменьше, то будет так же как у Вас в 3-м скрине. Просто у меня вид отображения закладок не меняется. И разница наших интерфейсов в том, что Ваш интерфейс пользователь наполняет сам, а в моем интерфейсе это делает администратор, а пользователь в этом не принимает участие..
Пожелание: добавить возможность указывать ссылки.
Например, можно сделать избранное по контрагентам и т.п.
(40) Извините по сообщение не понял в чем состоит пожелание
Обновил 1.6
1. При пустом списке и когда нет настроек пользователю выводится поясняющее сообщение
2. Исправил пару мелких ошибок
Есть в обработке одна досадная ошибка. Пользователь, у которого нет права «Интерактивное открытие внешних обработок» может запросто добавить в панель любую внешнюю обработку и спокойно ей пользоваться.
Для исправления этой ошибки мне пришлось срочно в модуле формы «Основная» добавлять такой код:
Процедура ДеревоПользователяПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
//—=== ## Dimma Begin 19.08.09 ===—
Если ЗапрещеноЗапускатьВнешниеОбработки И Найти(ДанныеСтроки.ВыполняемыйКод,»ОткрытьВнешниюОбработку»)>0 Тогда
Если ЗначениеЗаполнено(ДанныеСтроки.Родитель) Тогда
ДанныеСтроки.Родитель.Строки.Удалить(ДанныеСтроки);
Иначе
ДеревоПользователя.Строки.Удалить(ДанныеСтроки);
КонецЕсли;
Возврат;
КонецЕсли;
//—=== ## Dimma End 19.08.09 ===—
ОформлениеСтроки.Ячейки.Действие.ОтображатьКартинку = Истина;
ОформлениеСтроки.Ячейки.Действие.ИндексКартинки = ДанныеСтроки.НомерКартинки
КонецПроцедуры
Или можно добавить этот код при сохранении Настройки.
Но вообще, конечно, надо делать проверку права и не разрешать Пользователю добавлять внешние обработки, если прав нет.
(41) Он имел в виду, чтобы можно было включать в Панель не только общие метаданные, но и конкретные объекты. Например конкретный документ или конкретного Контрагента, как например сделано тут:http://infostart.ru/projects/5466/
Имхо это всё лишнее, но вот что не лишнее и чего просят все, это возможность добавлять в Панель элементы справочника «ВнешниеОбработки». Этот справочник уже стандарт 1С и, конечно, неплохо было бы включить в панель возможность добавлять его элементы.
(42) лучше в ПриВыводеСтроки ничего не добавлять у 1С и так тупит не по детски 🙂
Как пользователь откроет эту обработку если она тоже внешняя ведь у него нет прав (хотя можно ведь в конфу встроить)
при попытке открыть запрешенное… не откроется т.к. просто нет прав
в 1.7 решил проблему с правами на внешние отчеты и обработки
(43) на счет «»ВнешниеОбработки» согласен с вами сейчас просто нет времени на это (хотя сделать и не сложно) извините много дел 🙁
(44) Я особо тормозов не заметил, но, конечно, надо в другое место проверку ставить. Просто я когда это увидел со страха поставил в первое, что в голову пришло, а то у нас пользователи уж слишком ушлые.
Я специально проверил добавление внешней обработки на пользователе без прав. Панель спокойно запоминает обработку в дереве, а потом запускает неинтерактивно, что разрешается при любом раскладе прав.
Будем ждать 1.8 с «Внешними обработками» 😉
Спасибо за Панель!
(45) тормоза при простой промотке
Проверил все еще раз (даже встраевал в конфу) вроде все правильно работает. На уровне Метаданные есть права «ИнтерактивноеОткрытиеВнешнихОбработок»
«ИнтерактивноеОткрытиеВнешнихОтчетов» их и проверяю если их нет кнопка не активна.
Спасибо за помощь 😉
46+ еще если есть доступ только к обработка при добавлении соотв. фильтр
(44) В 1.7 действительно с правами на добавление внешних обработок всё ок. Но осталась еще одна дыра. Если пользователь загружает дерево из файла, а в этом файле есть внешние обработки и отчеты (чужой файл), то он их тоже сможет спокойно использовать. 😉
PS
Извиняюсь за дотошность. 🙂
Чтобы решить пункт 48 достаточно добавить в модуль формы РедактированиеИнтерфейса следующий код и немного изменить Процедуру КоманднаяПанель1СохранитьИзменения(Кнопка)
Процедура КоманднаяПанель1СохранитьИзменения(Кнопка)
ФормаВладелец.ДеревоПользователя = ПредварительноОбработатьДеревоДействий(ДеревоДействий);
ЭтаФорма.Закрыть();
КонецПроцедуры
//—=== ## Dimma Begin 19.08.09 ===—
Функция ПредварительноОбработатьДеревоДействий(мДеревоДействий)
Если НЕ ПравоДоступа(«ИнтерактивноеОткрытиеВнешнихОбработок»,Метаданные) ИЛИ НЕ ПравоДоступа(«ИнтерактивноеОткрытиеВнешнихОтчетов»,Метаданные) Тогда
ПроверитьНаПрава(мДеревоДействий.Строки);
КонецЕсли;
Возврат мДеревоДействий;
КонецФункции
Функция ПроверитьНаПрава(СтрокиДерева)
МассивСтрокКУдалению = Новый Массив;
Для каждого Строка Из СтрокиДерева Цикл
ПроверитьНаПрава(Строка.Строки); // Проверяем рекурсивно
Если НЕ ПравоДоступа(«ИнтерактивноеОткрытиеВнешнихОбработок»,Метаданные) И Найти(Строка.ВыполняемыйКод,»ОткрытьВнешниюОбработку»)>0 Тогда
МассивСтрокКУдалению.Добавить(Строка);
ИначеЕсли НЕ ПравоДоступа(«ИнтерактивноеОткрытиеВнешнихОтчетов»,Метаданные) И Найти(Строка.ВыполняемыйКод,»ОткрытьВнешнийОтчет»)>0 Тогда
МассивСтрокКУдалению.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Для каждого Элемент Из МассивСтрокКУдалению Цикл
СтрокиДерева.Удалить(Элемент);
КонецЦикла;
КонецФункции
//—=== ## Dimma End 19.08.09 ===—
А с регистрами накопления по прежнему не дружит ? В общем списке
(Рис. 5563) открыть не смог (в БП1.6.17.4 и КА1.0.2.1).С первой закладки всё О.К.
Супер, просто супер. (19) Передо мной стояла аналогичная задача, тож пользователи задолбали. Это обработка сэкономила мне дофига времени, спасибо большое)))
(50) Проверю, исправлю седня
(51) Спасибо 🙂
А чего она умеет, чего не умеет типовая? )))))))))))))))))))))))))))
(53) это к чему?
1.8. Исправил ошибку при открытии регистров накопления из закладки конфигураци
1. Ошибка при открытии внешнего отчета, т.е. добавляется нормально, при открытии ошибка
2. Не плохо было бы добавить вызов и справочника «Внешние отчеты».
(55)
п.1. проверил работает может что с отчетов
п.2. пока нет времени
Код прописал, обработку добавил. При запуске 1С Предприятия автоматом не грузится почему-то, руками запускается. Если убрать галку Запускать при старте — потом перестает запускаться вообще… В чем может быть причина?
(57) Проверьте под отладкой скорее всего ошибка в попытке
Обработка отличная. Вопрос. А почему нельзя сделать загрузку при открытии 1С как панель функций?
(59) Такова 1С. Запуск ПанелиФункций задан в конфигурации.
Надо изменять конфигурацию :
В описании написано
Для запуска обработки у каждого пользователя при старте системы (присутствует галка «Открывать при старте»):
В «Модуль приложения» процедуру «ПриНачалеРаботыСистемы» добавить след. код:
//Запуск панели пользователя
Попытка
ПанельПользователя = ВнешниеОбработки.Создать(ИмяФайлаОбработки);
ФормаПанелиПользователя = ПанельПользователя.ПолучитьФорму();
ФормаПанелиПользователя.Открыть();
Исключение
КонецПопытки
(57) «Если убрать галку Запускать при старте — потом перестает запускаться вообще… В чем может быть причина?»
Да это можно сказать недоработка
Сохранились настройки что пользователь не желает запускать
Выход: Убить настройки.
Вот еще какой вопрос есть. В обработке есть возможность добавления внешних обработок, но когда я пытаюсь ее запустить выдает вот такую ошибку:
Ошибка открытия внешнего отчета: (адрес с именем отчета)
(62) поправил
все интуитивно понятно и удобно. для непривередливых юзеров и ненавернутых интерфейсов сама то. спасибо.
Спасибо!:) Клёво! Первая панель, которой я пользуюсь:)
Супер!
Симпатично и лаконично.
Единственное, чего не хватает — так это «Бизнес-процессов» и «Задач».
(в последних типовых уже часто используется, например «Задачи пользователя»
(66) Спасибо. Извините нет желания доделывать (хотя это легко).
ИМХО, в форме «Редактирование интерфейса» лучше сделать кнопку «СохранитьИзменения» кнопкой по-умолчанию. Тогда форму можно будет быстро закрывать по Ctrl+Enter.
UPD. И на открытие формы настройки неплохо было бы горячую клавишу настроить.
PS. Версия 1.9.
(68) поправил… версия 1.91
А как же такие эл. конфигурации как:
Произволные отчеты;
Внешние отчеты;
Внешние обработки;
+ отчеты лучше запускать с выбранной настройкой
(70) Да надо доделать. В ближ.время
(71) не дождался 🙁
поэтому функцию ДобавитьСписокМетаданных формы РедактированиеИнтерфейса
дополняем след кодом
Показать
(72) Спасибо добавлю… просто нет времени на этот проект
версия 2.0
Добавил:
Доп. отчеты
Доп. обработки
добавил версию под 8.2 (в дальнейшем доделывать буду только в ней)
Спасибо за обработку! Перебрал кучу похожих, но остановился на Вашей. Просто и со вкусом, и ничего лишнего.
Большое спасибо. простой и ничего лишнего. спасибо за сэкономленное время.
Спасибо за обрабоку, замучался лазить за отчётами. Теперь всё будет под рукой.
(72) German,
поэтому функцию ДобавитьСписокМетаданных формы РедактированиеИнтерфейса
дополняем след кодом
Показать
всообщении
боролись с любыми обработками
Показать
а сейчас опять любых добавить? только отчетов…