<?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='\
Все
{Форма.Форма(30)}: Поле объекта не обнаружено (Адресные сокращения)
Выборка=Справочники[ТЭ.НаименованиеСправочника].Выбрать();
И можно было бы кнопки управления флажками разметить — муторно по всем строкам галки ставить 🙁
Добавь «ОбработкаПрерыванияПользователя» в циклах.
И на Банковских счетах тоже вспоткнулся (2)
Жесть в отладчике:
Выборка=Справочники[ТЭ.НаименованиеСправочника].Выбрать()
Отгадай что подставляешь в квадратных скобках для поиска метаданных?
«АдресныеСокращения» или «Адресные сокращения»??? Поэтому ошибок нет только в справочниках из одного слова!!!
И нафига спрашивается в цикле по каждому элементу запускать «НайтиПоСсылкам»? Для чего, по твоему, на вход предусмотрена подача массива ссылок на объекты — что бы туда одну ссылку загружать? Необоснованно увеличил скорость выполнения обработки раз в 100 (если не больше)!
товарищ AnryMc еще «зеленый» прогер 😀
(5) Конечно не «скорость», а «время»!!! 😀
(All) Извините выложил версию с ошибкой. Исправлено.
+ тоже самое по документам НО НА СВОЙ СТРАХ И РИСК!
(7) А скорость меня и не волновала 😉
(3) Не делал пециально — чтобы было время «одуматься» 😀
(6) А почему слово ЗЕЛЕНЫЙ в кавычках?
Чуть доделал — (3)
(2) Добавил
(10) ну дык в переносном же смысле 😀
При установке пометки по Номенклатуре выскакивает такая бяка:
«Перед записью необходимо определить единицу измерения!»
Думаю надо использовать режим обмена данными перед записью.
«ТУО.ОбменДанными.Загрузка = Истина;»
(14) + (13) Спасибо. В ближайшее время добавлю
Добавлены выраженные пожелания
В статусе быстро-быстро мелькает «На удаленте«,
Хорошо бы добавить прогресс — я тут кууучу мусора удалял и не знал когда уже наконец
а так +!
Легко удалил неиспользуемые договоры контрагентов.
И ещё: при отметке галочками нескольких видов элементов, хотелось бы, чтобы если есть ссылки только между собой у объектов, они бы тоже считались неиспользуемыми, например у объекта договор контрагента есть ссылка на владельца, а у контрагента — ссылка на основной договор, в итоге циклическая ссылка и они не отмечаются, а выявить очень сложно. Конечно, это бага проектирования базы жесточайшая, но так делает 1С.
Обработка ничего не дает при работе со справочниками Номенклатура и Контрагенты
По следующей причине:
В элементах этих справочников есть реквизит основная единица измерения и основной договор.
Справочники ссылаются друг на друга и удалить их этой обработкой не возможно
да, с номенклатурой грустно
Автор, доделай обработку. Интерес к ней есть, а вот номенклатуру — не почистишь!
(17) boogie, (18) average, (19) Ольга_tmp, (20) Vitko_freedomcars,
Это задача из серии: «что первично – курица или яйцо?»
Не вижу необходимости добавлять исключение (номенклатура – единица измерения) в более менее общий алгоритм поиска. Данная ситуация должна разрешаться стандартной обработкой «Групповая обработка справочников и документов» (например, делается отбор элементов справочника «Номенклатура» по нужной позиции значения реквизита «Базовая единица измерения» и для отобранных элементов выполняется обработка установки реквизита в другую единицу или «пустую»).
Иначе нужно делать перекрестный анализ типов всех реквизитов всех метаданных, что долго и непродуктивно (и не всегда очевидно) или давать возможность пользователю выбирать реквизиты отбора (что тоже тяжело и обязывает его знать структуру метаданных).
Хорошая идея!
Если у кого есть для 7.7- ки, выложите плиз.
За идею «+».
(22) firuzji,
К сожалению для 7.7 не делал…
(22) firuzji, На ИТС —
Для 7.7 ObjDel.ert
(24) Alex_E,
Может я отстал, но раньше эта обработка не искала ссылок на объекты, а просто отбирала их.
(25) Не совсем понял, что значит не отбирала а искала — но смысл в том, что с её помощью можно пометить на удаление объекты, на которые нет ссылок.
(26) Alex_E,
ПАРДОН. Давно это было — забыл.
(27) Давно, я просто пользовался, и однажды круто налетел (в доработанной конфе удалил служебные справочники, на кот. реально не было ссылок, а они использовались при создании документов) — поэтому и запомнилось — особенно как я потом с помощью FoxPro восстанавливал dbf 🙂
(24)Спасибо нашел.
(17) boogie, (18) average, (19) Ольга_tmp, (20) Vitko_freedomcars,
Для справочников добавил колонку «Исключение» можно исключить из проверок ссылки определенного справочника, например:
«Контрагенты» — «Договора контрагентов»,
«Номенклатура» — «Единицы измерения», …
«Зеленый», спасибо! Плюс!
что-то скромненькая обработочка…
под 8.х (автор, правда, решил деньги брать, изначально было бесплатно)
под 7.7 (бесплатно)
есть и покруче функционально:
—
—
(32) yuraos,
1) Для 7.7 см. пост (24)
2) Моя появилась 02.02.2010 20:57, а та для 8.х — 09.02.2012 22:06 Разница в 2 года
(33) мда …
много воды утекло с тех времен
😉
мго чего наделадось.
(34) yuraos,
Опять таки «шара»
Спасибо, помогло.
(36) alonzomozley,
Можно ещё «плюсик» поставить
пожалуйста )
(38) alonzomozley,
Спасибо
Не хватает «Сохранить настройки» и чтобы их можно было восстановить на другой базе!
В УТ 11.1 есть обработка Удаление неиспользуемых элементов справочников.
(41) Поручик,
Эта публикация от 02.02.2010 20:57
Когда она (обработка) появилась в УТ 11.1?
ЗЫ Может «предьяву» 1С сделать — за плагиат? ;-)))
(40) SEvAn,
Область отбора для поиска строиться каждый раз заново — «обходим метаданных».
Нет уверенности, что в другой конфигурации будут те же метаданные… Конечно можно поизвращаться сравнением имен… но не вижу смысла…
(43) в «совсем» другой да, но часто сливаем несколько в одну и тогда не помешало бы)
Сделайте, хотя бы, чтобы можно было отметить все справочники, т.к. снимать отметку мне лично надо на нескольких всего.
Жду)
(44) SEvAn,
Сделал сохранение и чтение настройки через файл — поиск «соответствия» по имени и типу (как текст).
Смотрите 4 версию.
(45) кнопки называются почему-то одинаково и еще бы крыж «пометить/разметить все»
(46) SEvAn,
Упс — это всё лень матушка. исправлю…
(46) SEvAn,
2015/03/19 Версия 5
Добавлены кнопки «пометить все» и «снять пометки у всех»
Какой-то неоправданно скромный выбор объектов. А где бизнес-процесс, планы счетов, обмена, видов характеристик и расчёта?
(49) vasyak319,
А ещё можно сделать чтобы 1С-ка сама работала — без оператора….
(50) не надо юродствовать. То, что написал я, сделать проще простого и странно, что вы этого не сделали.
(51) vasyak319, Сделать проще простого. Надо просто потратить немного времени, но пока я не могу себе этого позволить…
Можно написать много разного… Просто делал то что нужно было самому — потом выложил…
В моем случае — такой функционал был мне достаточен.
Навряд ли Вы найдете базы с сотнями введенных видов расчетов которые ни где не используются… А вот, например, справочник Номенклатура или Контрагенты — эти почти всегда с мусором…
ЗЫ Извините, если если «задел» своим постом.