<?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='\
а чем универсальный подбор и обработка объектов плоха?
Не судите строго — делал для себя после «натягивания» на переписанную конфу типовой — слетела нумерация у многих справочников (и как потом выяснилось и у кучи документов тоже).
Согласен, универсальная обработка закрывает по функционалу то, что я сделал. …Я ПРО НЕЕ ПРОСТО НЕ ЗНАЛ 🙂
Иногда проще написать, чем искать 🙂
Спасибо за комментарии (и конструктивную критику)
«Иногда проще написать, чем искать», а иногда проще найти чем писать. На поиск времени много не уйдет, но вы удивитесь как тут много всего на эту тему. поиск.
Две внешних обработки то зачем O_o в одной можно сделать
Еще не понятно зачем ставить заранее спр. Контрагенты… т.к. если в конфе нет справочника контрагенты (да такие бывают 🙂 ошибка при нажатии на выполнить
рАССКАЖИТЕ, А КАК ЭТО РАБОТАЕТ???
Дорогая «анка», работает эта штука так:
1)выбираем какие типы объектов будем обрабатывать…
2) обработка запросом получает все объекты (выбранного типа метаданных) «по росту» (в порядке возрастания номеров), и создает у них новый номер (с учетом длины номера в конфигурации у данного объекта метаданных). Если указан префикс, то он присутствует в номере.
*) чтобы не возникало конфликта уже новых номеров и еще старых, иногда стоит перенумеровать сначала все с префиксом, потом без него (или со старым префиксом).
**) на самом деле на диске ИТС действительно есть шикарная обработка по групповому изменению документов и справочников — по функционалу она достаточна, чтобы на эту тему уже ничего не писать. Когда я делал эти обработки, я про нее просто не знал.
Всем удачи! …и спасибо за плюсики 🙂
обработка проста, эффективна и удобна в использовании. Спасибо
Спасибо огромное, полезная вещь, даже просто жизненно необходимая !!!!!
(7) (8) спасибо за теплые слова
Отлично. При переходе с 7 на 8 помогли. Большое спасибо.
Немного покритикую
1. Внешняя обработка имеет реквизиты, за чем они нужны, остается полной загадкой, когда вполне можно было просто описать переменные в модуле формы.
2. Грязное формирование текста запроса (замена имени таблицы далее по коду). Все равно при использовании в конфигурации, где нету «ПоступлениеТоваровУслуг» конструктор не схавает, а читабельность пострадала.
3. Обработка позиционируется как «Универсальная» а в ней по умолчанию предлагается перенумеровывать документ «ПоступлениеТоваровУслуг». Должен быть выход а не попытка перенумерация этого документа.
4. Предупреждение об использовании по умолчанию идет с таймаутом и без возможности отказа, то есть если я нажал кнопку и появилось предупреждение – то это равносильно табличке перед взрывом «сейчас будет БУМ», нужно использовать «Вопрос». (это критическая ошибка)
5. На форме 2 поля, текстовое и выбора документа, гораздо проще и понятнее было бы сделать 1 список значений.
6. Не работает с числовыми номерами документов
7. Не работает с последовательностями по префиксам, а все сводит в одну кучу (к единому префиксу).
Удачи.
Прими мою критику как профессиональную поддержку коллеги по программированию.
(11) Дима, как же тебя зацепила моя критика твоей перенумерации…. что ты, отказавшись от 31 (!) плюсика, снял ее с публикации 😀
http://infostart.ru/public/14567/ — «Публикация не активна» 😀 😀 😀
Согласен, такое творение-позорище явно их не стоит 😀
Человек, который плохо понимает что такое транзакция, пишет избыточный код, глупо нагружает систему (перепроводя (!) документы при замене всего лишь номера) — наводит критику, забавно.
То что мне не понравилось в твоем (11) комментарии:
«…2. Грязное формирование текста запроса …» — это базар, за которым ты не следишь. Ты не владеешь техникой формирования/модификации текста запроса методом замены отдельных фрагментов, в решениях 1С это используется часто и это не только грамотно, но и удобно.
«…обработка имеет реквизиты, за чем они нужны, остается полной загадкой..» — это и есть переменные (на время существования обработки как объекта), они доступны для всей обработки из любого ее места, мне так удобно.
…все остальное — это сопли обиженного мальчика, которого ткнули в его же (извини) говнокод.
Ты выдаешь реакцию по типу «…а вот ты, а вот ты… ВОТ!» 😀
(12)я не снимал ее с публикации, и мне наплевать на рейтинги и прочее. (или кликнул случайно, или это администрация. По крайне мере я ее востановил)
я не понимаю почему ты так завелся? Неужели ты думаешь, что твоя обработка идеал а моя говнокод? Попробуй сравнить их более обьективно 🙂
На сим раскланиваюсь и прекращаю столь бесмысленый спор, по сколько для меня совершенно понятно, что ты не можешь адекватно оценивать критику к своей персоне.
удачи!
Бывает профессиональная критика (специалистов) — она ценна и полезна, потому что помогает увидеть новые аспекты проблемы или ее решения, а бывает …то что тут писал (в моей ветке) vde69
Мне нужно изменить инвентарный номер ОС. Где найти обработку?
Частично повторяет функционал
УниверсальныеПодборИОбработкаОбъектов.epf с Диска ИТС
Надо все перенумераторы, перепроводчики и прочий бред убрать
А у меня ПеренумерацияСправочников не запустилась. Вежливо послал со словами «не может быть открыта текущей версией программы». Конфигурация Зарплата и кадры бюджетного учреждения, релиз 16, платформа 15. 🙁
Удобно и быстро! Спасибо)
Спасибо. Круто
Хорошая работающая обработка, но возникла одна проблема, после нумерации Справочника Характеристик номенклатуры, в Подборе изменилась последовательность характеристик, что вызвало шок у операторов, к сожалению.
Спасибо!
спасибо автору)))очень пригодилась обработочка)))
Возникла необходимость срочно перенумеровать документы (у предыдущего бухгалтера нумерация была сбита, цифры вперемешку с буквами). Имеется в виду Бухгалтерия 8.1. Была большая надежда на обработку с диска ИТС. Но после ее отработки во-первых, вылетели ошибки, часть документов не перенумеровалась совсем, а у части номера пошли невменяемые — с девятками в первых позициях. Вся надежда на Вашу обработку!
Да, если диск ИТС отсутствует, то ваша обработка придет на помощь ).
Обработка справочников не работает! (не перенуверовывает)