<?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='\
(0) Обработка однозначно полезная.
Мелкое замечание — двуязычность сделана неудачно.
Все-таки лучше использовать типовые средства для локализации строк (НСтр) и интерфейсов (синонимы на разных языках).
Сейчас открываешь обработку в английской конфигурации — а там каша в интерфейсе.
Если не секрет — почему код на английском? 🙂
(1)
Да, применение НСтр было бы лучше. Руки переписать пока не дошли, но потом обязательно доработаю.
Уточните пожалуйста, в чем именно каша? Такого быть не должно, проверял на нескольких разных конфигурациях и на разных версиях платформы.
Честное слово, я свято чту традиции «низкого порога вхождения» в программирование на 1С и для бухгалтеров всегда пишу на русском 🙂 Но 1С вроде бы начинает заявлять о себе, как о международном решении. Может стоит хотя бы начать тренироваться писать код, понятный людям, живущим за пределами РФ и Узбекистана? 🙂 В чем была бы ценность Java или C++ если бы весь код для них был написан на украинском?
Спасибо за замечания, а то смотрю люди качают, а пожеланий по доработке не высказывают.
(2) пример
(3)
Еще раз спасибо, что начали копать в этом направлении. Исправил и загрузил новый файл.
Еще добавил иногда нужную возможность задавать ключи командной строки при запуске 1С:Предприятия от имени пользователя (см. картинку)
благодарю! мощная вещь! планирую использовать особенно для поиска. Многие отчеты,коих уже под сотню в конфигураторе и в синониме называются по разному, пока найдешь-замучаешься, а тут удобно ищет и в синониме и и так. респект!
для внешних файлов можно выводить отдельным столбцом время изменения? сделать сортировку по этом времени.
(5) Пользователь для запуска на третьей вкладке также ищется по имени и по полному имени. Удобно когда известно только имя, фамилия или отчество. Забыл отметить это в описании.
Учту при доработке. Сортировки по времени изменения уже самому не хватает.
Отличный продукт. Еще бы возможность комментарии дописывать к подключенным внешним файлам и папкам, т.к. иногда одного имени файла недостаточно
(8)
Вопрос в том, где их сохранять. Содержимое каталогов с файлами может меняться и оно перечитывается при обновлении списка. Сейчас в хранилище настроек сохраняются только пути к подключенным каталогам верхнего уровня.
Можно сохранять комментарии к файлам в хранилище только если они были изменены, а в качестве ключа использовать полный путь к файлу. По идее это не превратит хранилище в мусорку, но проверку сохраненного значения придется все равно делать для каждого файла из списка. Это может заметно тормозить обновление списка файлов, особенно когда их несколько сотен.
(9) а в текстовом csv-файле (по аналогии с descript.ion) в каждой папке? Имя файла — ключ, за ним через «;» — комментарий.
(10) Это вариант. Достаточно даже одного файла в корне, чтобы не захламлять лишними файлами каталоги. Еще можно в сохраняемом реквизите формы (списке значений) держать соответствие полного пути к файлу (значения) комментарию (представлению). И удалять элементы из реквизита-списка, если при обновлении списка файлов не обнаружен файл с сохраненным путем. Оба способа позволят хранить комментарий не вызывая сильных тормозов при обновлении списка.
очень простая и функциональная вещь. давно просилась. +
Если бы было можно я бы больше плюсов поставил!
Круто. Жалко что только на управляемых формах. Есть еще в арсенале несколько старых конфигураций.
Спасибо.
Отличная разработка! Респект автору!!!
Очень удобно, спасибо!
зачетная обработка
А на сколько это правильно запускать что либо от имени другого пользователя?
Не уменьшает ли это доверие пользователей к системе???
(18) bayce, Имея права администратора ты и так можешь всегда запустить приложение от имени любого пользователя, просто тут это автоматизированно.
Обработка прекрасна! Выкачал бы ее на все sm, если бы работал на УФ =(
добрый день!
Запуская приложения от имени любого пользователя имея права администратора, ты же должен сбрасывать пароли, и пользователи поймут, что кто то заходил под их именем.
Здесь же на сколько я понял ты пароль не сбрасываешь?
Шикарная вещь, спасибо. Я бы за такую денег брал, рублей 100 хотя бы
(21) На Инфостарте в свободном доступе есть и более полезные для повседневной работы вещи. Если каждый начнет требовать копейку за мелкую разработку, то мы больше потеряем, чем приобретем. Гораздо важнее отзывы, помогающие найти и устранить ошибки.
(22) другими словами, она очень полезная и приятная)
Спасибо. Очень удобно использовать в управляемых формах.
Спасибо! Круто… за гифки в статье особое спасибо
Перешел на УФ, даже не надеялся найти нечто подобное. Огромное спасибо автору.
Вопрос. Заполнил закладку «Внешние файлы» по каталогам, часть внешних файлов удалил за ненадобностью через кнопку «Удалить», в настройках поставил галку для кнопки «Обновить». Нажал ее и вернул удаленные внешние файлы. Предлагаю подумать о сохранении списка на этой закладке при повторных открытиях Вашей обработки.
(27) Надо будет подумать. Вкладка «Внешние файлы» предусматривалась как быстрый аналог команды «Файл -> Открыть» и сейчас предполагает работу с каталогами, в которых находятся только файлы-инструменты для повседневной работы. Если сделать возможность убирать из списка файлы так, чтобы при обновлении списка они не добавлялись снова, то придется предусматривать и функцию возврата этих файлов в список.
Как говорится, гулять так гулять!
http://infostart.ru/public/15317/)
В БП 3.0 в динамическом списке при выборе документов нельзя установить видимость поля = Комментарий. Желательно это поле видеть.
Если будете развивать свой проект хотелось бы видеть не только документ но и его движения (как это реализовано
Успехов в работы для нашего счастья 🙂
(29) Значит поле «Комментарий» — это строка неограниченной длины.
Скрытие поля «комментарий» в данный момент — техническая необходимость. Дело в том, что этот универсальный список изначально предназначался только для того, чтобы иметь возможность проводить отборы по реквизитам табличных частей. Для проведения отборов по реквизитам табличных частей в запросе динамического списка приходится проводить группировку по реквизитам основной таблицы, а группировка по полям неограниченной длины невозможна.
Метод кстати очень интересный и описан здесь:http://infostart.ru/public/237017/ . К сожалению этот метод не позволяет устанавливать отборы при работе в обычном интерфейсе и интерфейсе «Такси» на 8.3. А комментарий видеть очень хочется, в этом Вы правы 🙂 Поэтому при доработке либо придется отказаться от отборов по реквизитам ТЧ, либо дать возможность пользователю выбирать, хочет он видеть реквизиты неограниченной длины, либо проводить такие отборы.
Спасибо за предложения по развитию обработки. Надеюсь, что в ближайшие дни появится на это время 🙂
Огромное спасибо, ценная обработка
Спасибо, статья оформлена на ура
здоровская, понравилась!
только не хватает отображения отчетов и обработок по справочнику «Внешние отчеты и обработки»
Для УПП 1.3 не подходит, пытается открыться, затем ничего не происходит(
(30)
Чтобы была возможность группировать по комментарию, в самом запросе приведите его к конечной длине, например:
В 8.3 отбор по ТЧ встроен в платформу, ничего дописывать не нужно.
Кто то что то похожее под обычные формы видел?
для обычных форм:
http://infostart.ru/public/160397/
запомню публикацию на будущее) надеюсь, автор не планирует забирать обработку из бесплатного доступа
После обновления версии платформы до 8.3.5 стала зависать намертво при попытке входа под другим пользователем. До этого работала как часы. Не подскажете в чем может быть проблема? Управляемые формы, конфигурация не типовая.
Вопрос, снят. По всей видимости проблема в самой базе ( Буду делать тестирование и исправление, может поможет
Автор спасибо за инструмент
Изменение раскладки через COMОбъект реализовали?
Спасибо, удобная замена команде Все функции.
Скачал, спасибо. Не понял — что нового в версии отт 18.05.2018?
Заметил проблемку — выставил группировку по регистру накопления,
при выборе другого регистра группировка осталась? Но это ничего,
а при выборе другого регистра, у которого нет такого реквизита прошел
вылет по ошибке.
(46) В обновлении только другая строка запуска 1С под пользователем. И в обработчике «ПриЗакрытии» нет обращений к серверу, если происходит закрытие всего предложения. Не стал обозначать эти незначительные изменения в публикации, просто заменил файл.
Спасибо автору!
(50) Надо было на немецком? «Универсальные» инструменты с открытым исходным кодом, написанные на языке отличном от английского, являются псевдоуниверсальными. Особенно если созданы для IT-специалистов, а не бухгалтеров ))
(52) Хотелось бы изменить описанную Вами ситуацию. Помимо Инфостарта есть еще GitHub, GitLab и т.д. Также рекомендую следить за тенденциями и действиями фирмы 1С:https://hh.ru/employer/3271505 .
Отличная штука.
🙂 Но динамический список регистра бухгалтерии — без видов и значений субконто.
Интересная — по сути консоль администратора +1
Динамический список не все поля выводит?
Взял документ ВводОстатков в ЕРП, а Комментария нет
(57)
If Field.Type.ContainsType(Type(«TypeDescription»)) Or ( Field.Type.StringQualifiers.AllowedLength = AllowedLength.Variable And Field.Type.StringQualifiers.Length = 0 And Field.Type.ContainsType(Type(«String»)) ) Then
Continue;
EndIf;
Не выводит строки переменной длинны и длинной 0 🙁
(58) Слегка доработал отчёт, пока работает
Без обид, но помойму слишком громоздкая! Слишком много кнопочек и галочек! А в целом за труд 5+ !!!