<?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='\
Выдает ошибку, если уникальный идентификатор источника пустой:
{Форма.Форма.Форма(181)}: Ошибка при вызове метода контекста (Записать)
НЗ.Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПередЗаписью’
по причине:
{РегистрСведений.СоответствияОбъектовИнформационныхБаз.МодульНабораЗаписей(20)}: Значение не является значением объектного типа (УникальныйИдентификатор)
ЭтотОбъект[0][«УникальныйИдентификаторИсточникаСтрокой»] = Строка(ЭтотОбъект[0][«УникальныйИдентификаторИсточника»].УникальныйИдентификатор());
Решилось удалением таких строк, где уникальный идентификатор источника был пустой, вручную
В обработке нет особой защиты.
Буду дорабатывать, обязательно учту данную проблему.
Спасибо за информацию!
Что-то не могу открыть обработку в Управлении Торговлей 10,3 (10,3,34,2) 1С пред. 8,3,7,1873. Загрузить загрузил, но не открывается мигает экран и все. В чем может быть проблема? Не подскажите?
Обработка сделана для управляемых форм. Чтобы заработала в обычном режиме, именно так и запускается Торговля 10.3, необходимо либо добавить обработку в конфигурацию, либо запустить программу в режиме управляемых форм.
Если гугл не поможет это сделать, пишите в личку.
Добрый день!
Попробовал вашей обработкой решить такую проблему:
Был обмен УТ 10.3 -> БП2, перешли на БП3. Базы типовые, обновление прошло штатно.
После этого в БП3 при обмене начали появляться карточки <Объект не найден>.
Сначала нашел вашу обработку, она удалила несколько тысяч неверных записей в БП3 и чучуть в УТ10.3. Не помогло.
Потом увидел что я не запустил типовую обработку конвертации обменов с 2.0.
Загрузил ей регистр «Соответствие объектов инф. баз» в УТ 10.3. Не помогло.
Снова почистил регистры вашей обработкой. 70 записей в БП3, 30 записей в УТ 10.3. Обмен по ночам крутится, результат завтра увижу.
Что я вижу, анализируя «кривые» карточки:
например есть «Степлер» (Номенклатура), который прилетел в БП3 как <Объект не найден>. Это старая карточка, которая была создана еще во времена обмена с БП2 и залетает в БП3 вместе с документом.
Так вот, записи про этот Степлер есть в РС «Соответствие объектов для обмена» в обоих базах. но этот РС для обмена с БП2.
А записей в РС «Соответствие объектов инф. баз» нет ни в одной базе.
(6)
В УТ Вы перешли на новый план обмена, предназначенный именно для обмена с БП 3.0?
(7), конечно да.
(8) Объекты, которые прилетают из базы источника в приемник как «Объект не найден», выгружаются на той стороне «по ссылке».
Значит, на той стороне программа принимает решение, что объект ранее уже выгружался.
Контроль этого происходит по наличии записи в РС «Соответствия объектов информационных баз». Копайте туда.
Можно и дебагом пройтись, там нет дико сложных мест для анализа…
(9)
Можно и дебагом пройтись, там нет дико сложных мест для анализа…
А записи в РС как раз и нет. Спасибо за совет, буду копать.
(10) Была примерно та же проблема, сделал таким образом: Почистил весь регистр на стороне БП-3, Сделал полную выгрузку справочников и загрузил в бп, позиций примерно тысяч 60. теперь все работает как надо.
Бухгалтерия предприятия, редакция 3.0 (3.0.70.50)
При открытии обработки ТЧ не заполняется всеми записями по данному узлу
(12) Возможно Вы выбрали не тот узел, в плане обмена.
Посмотрите регистр «Соответствия объектов информационных баз» на наличие записей по выбранному узлу…
+1 Взял на вооружение