<?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='\
скачал обработку. нужно было заменить в базе один счет бухгалтерского учета на другой. Во первых при выборе счета в шапке он в табличной части дает выбрать только субконто этого счета а не счет замены. с этим поборолся. Но при замене счет на счет выдает ошибку
//////////////////////////////
{ВнешняяОбработка.ЗаменаСсылокВИнформацоннойБазе.Форма.Форма.Форма(419)}: Итератор для значения не определен
Для Каждого СтандартнаяТабличнаяЧасть Из СсылочныйТипРеквизиты.СтандартныеТабличныеЧасти Цикл
//////////////////////////////
работаю на конфигурации БП (3.0.51.14)
платформа 1С:Предприятие 8.3 (8.3.10.2375)
что посоветуете мне?
Спасибо за обнаруженные ошибки.
Недочет с установкой типа для ссылок поиска исправил. Ошибка с обработкой стандартных табличных частей исправлена. Новая версия обработки доступна для скачивания.
(1) см. пост (2)
Коллеги, добрый вечер!
Подскажите пожалуйста, в чём преимущество данной обработки перед штатной «ПоискИЗаменаЗначений83»?
При попытке повторного скачивания просит ещё старта ни. Как бы получить исправленное бесплатно?
(4) В этом решении объект, в котором нужно заменить ссылку, сериализуется в XML, а по сути преобразуется в строку. В строке происходит замена ссылки, после чего выполняется обратный процесс — XML-образ записывается в таблицу базы данных. Таким образом, не используется объектная модель доступа к данным. Кроме того, данные для выборки в некоторых случаях считываются запросами за один раз. Процесс замены ссылок по сравнению со штатной обработкой должен проходить быстрее, хотя замеров не делал.
к сожалению, опять небольшой косяк. Замена счета бух учета на счет не происходит. Хотя вышеописанные косячки поправлены. что делать?
(7) Опишите метаданные тестового объекта, в котором ожидается замена, но ее не происходит.
(7) Проверил, счет будет заменен, но только в тех объектах, в которые он входит как элемент метаданных. Если обратиться к описанию метаданных регистра бухгалтерии, то оно не содержит свойств типа «План счетов», как мы привыкли видеть это в журнале проводок. Эту проблему можно решить только переписыванием алгоритма обработки записей регистра бухгалтерии. Кстати, то же справедливо для замены вида расчета в регистре расчета. По возможности исправлю эти недочеты. Спасибо за успешное тестирование.
В описании разработки написано, что происходит замена объектов, в том числе плансчетов. По факту этого не происходит в проводках документов. На какой конфигурации я тестировал я писал выше. Предлагаю вам доработать обработку или вернуть денюжку
(10) Справедливо. Алгоритм обработки проводок исправлю, и, если обработка будет вами востребована, просто скачаете ее.
P.S. Скачал одну из ваших разработок.
(10) Внесены исправления в обработку регистров бухгалтерии и регистров расчета.
Исправил СтрНайти на Найти, а то ошибка была
(13) В синтакс-помощнике написано, что функция Найти() является устаревшей, и рекомендуется использовать функцию СтрНайти().
Что за ошибка была?
Здравсвуйте,
В независимых РС
помоему эта конструкция затирает все что есть РС,
Вот запрос кот. генерирется в процедуре ПодготовитьТекстЗапросаПоРегиструСНезависимойЗаписью:
(15) Да, это ошибка. Она исправлена. Файл обработки перезалит.
не работает с предопределенными данными в РИБ узле
Доработайте обработку.