<?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='\
Хорошая работа. Плюсую.
Отличное оформление- грамотный подход к созданию подсистемы — однозначно плюс в карму!
Грамотный подход. Такого в БСП (Библиотеке Стандартных Подсистем) не видел!
Неплохо сработал. Уважуха
(0) Чтоб мне так жить! Отличная вещь, даже не глядя. В первый же понедельник завнедрю в рабочий проект.
Спасибо, отличная работа!
Здорово! Испробую!
И пришло то время, когда пользователи управляемых форм уже начинают придумывать всякие хотелки по удобству работы с интерфейсом. К сожалению, сама платформа некоторые вещи сама делать еще не умеет или просто не умеет. Данная работа помогла сэкономить много времени. Большущее спасибо автору!
Молодец, поклал в копилку. Спасибо.
Всегда самого напрягало отсутствие сохранить настройки списка.
Подскажите, есть ли возможность сбросить все настройки списка. Так сказать вернуться к стандартной настройке, такой как она задана в конфигураторе. Очень интересна именно такая возможность.
(11) dim0n_la,
Кнопки «Сбросить все настройки» нет. Но возможность сбросить все настройки есть: создайте настройку «без настроек» и восстанавливайте ее при необходимости.
Меня смущает только «… как она задана в конфигураторе.». Возможно, вы в конфигураторе задаете настройки, которые зависят от каких-то параметров. Например, при открытии формы заказов в форму передаете параметр Контрагент, форма открывается с программно установленным отбором по этому контрагенту. В таком случае придется отказаться от автовосстановления настройки для того, чтобы работал ваш механизм отбора.
(12)
создайте настройку «без настроек» и восстанавливайте ее при необходимости.
Спасибо, такой вариант рассматривал, но он не подходит. Нужно именно получить настройку «как она задана загрузилась бы, зайди пользователь сейчас в предприятие в первый раз», скажем так.
Нужен именно такой вариант.
Никаких параметров не передается, просто в конфигураторе я настраиваю, к примеру, цвет строк проведенных документов зелененькими. Пользователи работают так 2 дня, соответственно эта настройка у них сохранилась, и каждый раз восстанавливается предприятием сама. Но теперь я ещё добавляю в конфигураторе настройку, которая подсвечивает все помеченные на удаление — красненьким, обновляю, но у пользователей при новом входе ничего не обновилось. Для того чтобы настройки применились, им нужно каждому у себя удалить всё оформление, закрыть форму и снова открыть. Неудобно!
(14)Большое спасибо за развернутый ответ. И первый и второй вариант вполне имеет право на жизнь. Уже рассматривал для себя их оба. Думаю второй вариант мне больше подходит, но не полностью, а только в части возможности распространения настройки на всех пользователей, чтобы они могли ее увидеть и при желании переключиться.
(15)
Хорошо. Сделаю второй вариант — настройки для всех пользователей и для группы пользователей. Выложу как следующую версию. Ориентировочно — на ближайших выходных.
Сегодня подключил дынный модуль, работает отлично.
Есть следующие вопросы, можна ли сделать так чтоб сохранялися так же настройки колонок (видимость,порядок) с возможностью востановления другим пользователем (то что изменяется через «Изменить Форму»), хть ети настройки и сохраняет платформа но они часто вылетают + есть необходимость копировать настройки колонок и расположения другим пользователям
Ребята!
Подсистема реально нужная!
Но не хотелось бы снимать конфигурацию с поддержки, можно ли «заставить» платформу сохранять хотя бы последний вариант динамического списка стандартными способами?
Если все таки снять конфиг с поддержки и только объединить конфигурации по инструкции, то реально избежать дальнейших проблем при обновлении??
Хорошая, удобная доработка. Однозначно плюс. Только желательно в начале публикации указать, что заточена для управляемого приложения, чтобы коллеги сразу понимали ограничения.
Огромное спасибо за труд! Разработка очень помогла при решении задачи сохранения настроек. Все грамотно выполнено.
Отличная вещь! Начинаю воевать с управляемыми формами — очень помогло. Вот только столкнулся с одной проблемой:
Делаю навороченную форму списка справочника. В ней у меня несколько динамических списков — один основной, и парочка информационных. Для основного списка использую командную панель формы, для информационных вообще не делаю, чтоб не загромождать. И вот вопрос — как мне вытащить кнопки сохранения/восстановления на панель формы? Тыкался-тыкался ничего не придумал, кроме как допилить функцию унсСервер.ПриСозданииНаСервере третьим параметром, чтоб добавляло в панель формы даже если динамический список не один. Это, конечно, коряво, но работает, если во втором параметре один элемент.
А вообще, наверное, надо будет массив на таблицу значений заменить и в ней указывать добавлять ли на командную панель формы и в контекстное меню. Насколько я понимаю, сейчас контекстное меню вообще не используется? А то вещь-то удобная.
Странно, что публикация не доступа для скачивания…
Платформенная фишка:
УправляемаяФорма.ПриСохраненииДанныхВНастройкахНаСервере (ManagedForm.OnSaveDataInSettingsAtServer)
УправляемаяФорма (ManagedForm)
ПриСохраненииДанныхВНастройкахНаСервере (OnSaveDataInSettingsAtServer)
Синтаксис:
ПриСохраненииДанныхВНастройкахНаСервере(<Настройки>)
Параметры:
<Настройки>
Тип: Соответствие.
Настройки формы.
Описание:
В обработчик передается объект-соответствие, в который будут сохраняться настройки. В объекте уже заполнены значения реквизитов, которые требовалось сохранять.
В обработчике можно добавить в объект настроек какую-либо информацию. Например, поместить в реквизит настроек отбор. <========== ЧИТАТЬ ТУТ.
Не совсем понятно как увязывается справочник Пользователи со встроенным списком пользователей. Их нужно вручную дублировать или я что-то пропустил
Спасибо большое. Очень помогло.
(16) Добрый день! Хорошая разработка, благодарю. Но хотел бы узнать когда доделаете возможность установки всем пользователям или группе пользователей одинаковой настройки. Еще бы хотелось бы вариант установки жесткой настройки формы, чтобы была возможность некоторым пользователям отключать возможность настройки форм, но это уже как нибудь сам попробую решить. Больше интересует возможность группового применения настроек )
Блин вообще уважуха тебе, прям нуу прям вообще, сэкономил мне н-ое количество часов, а то и дней моей жизни.
После полугода использования, пришлось влезать и переделывать почти по всем пунктам.
База в почти 2 тб на 500 активных юзаков вешается.
Вылезли все глупости с ростом активных юзверей.
этот «разработчик» приоткрытии ставит отборы, которые идут следом за отборами присозданиенасеревре, т.е. база колбасит дважды.
этот «разработчик» навязывает свои «последние» отборы автоматом, а глупые зверьки и без того боятся и не понимают программу. это все надо вырубать, т.к. последние отборы часто бесполезны, т.к. зверьки работают во вкладках УФ, а вот нагрузка отборов мимо индексов, которую надо будет сразу после открытия зверьку менять, нагружает сервак до нельзя.
а вот текущую строку «разработчик» не догадался сохранять. хотя и это не нужно моим юзверям, т.к. часто им надо в конец списка.
Отличная подсистемка, автору + за идею и исполнение.
(29) ture, и что что пришлось переписывать? Я тоже немного подработал напильником под себя, и оптимизировал. Не вижу ни одной причины писать «разработчик» в кавычках. Тем более подсистема бесплатная.
Кто-нибудь знает, есть ли что-то похожее с сохранением видимости и порядка полей динамического списка???? очень нужно!
(32)В свойствах динамического списка есть Автоматическое Сохранение Пользовательских настроек
СП
ДинамическийСписок (DynamicList)
АвтоматическоеСохранениеПользовательскихНастроек (AutoSaveUserSettings)
Использование:
Чтение и запись.
Описание:
Тип: Булево.
Управляет автоматическим сохранением пользовательских настроек.
Истина (значение по умолчанию) — пользовательские настройки динамического списка автоматически сохраняются при закрытии формы и автоматически загружаются при открытии формы, содержащей данный список.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
(33)
спасибо, но я имел ввиду программно управлять настройками видимости полей, чтоб можно было настраивать видимость и порядок колонок группам пользователей, т.е. сохранять сделанную настройку, а потом применить ее группе пользователей, а другой группе сделать другую настройку. но похоже нет такой возможности…
(34) настрой как надо в предприятии и скопируй настройку нужным пользователям.
(35)
в том-то и дело, что нет такой возможности, нужно написать механизм такой..
но, похоже, нет возможности получить пользовательские настройки, которые делают пользователи в форме команды «Изменить форму» в УФ. Есть возможность управлять свойством «Видимость» для поля, но оно может отличаться от того что установит пользователь. вот и думал что можно перехватывать целиком настройки, которые пользователь сделал и положить их в регистр сведений «Сохраненные настройки» и затем можно было бы копировать пользователям.
(36)Администрирование — Настройки пользователей — Персональные настройки пользователей — есть два пункта
Копирование настроек можно скопировать настройки от пользователя и настройки пользователя — можно настроить внешний вид.
Это для БП 3.0
(36) все это есть. Если типовая то это базовый функционал, если самописка, то на ИС есть обработки и по копированию.
https://infostart.ru/public/635729/
У меня только по очистке:
(38)
Сделана в УПП обработка на УФ, поэтому нет механизмов типовых для сохранения настроек управляемых форм.
(39) качайте тогда готовую обработку или сами код напишите, ссылку я вам дал с чего начать!
(40)
Спасибо! вот пишу щас под свою задачу!