<?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='\
необходимо добавить обработку ситуации на уникальность
{Форма.ФормаОбработки(268)}: Ошибка при вызове метода контекста (Записать): Не уникальный номер документа
Объект.Записать();
по причине:
Не уникальный номер документа
В чем отличие от стандартной ВыгрузкаЗагрзукаДанныхXML с диска ИТС ?
расширение ep. это сокращенный варьеант epf?
Как произсходит поиск объектов в базе — приемнике? Или как в обраьотке с ИТС по внутреннему идентификатору?
Пишет
{Форма.ФормаОбработки(268)}: Ошибка при вызове метода контекста (Записать): Код не уникален!
Объект.Записать();
по причине:
Код не уникален!
Судя по комментариям одни вопросы, а ответы где…
На диске ИТС есть «Универсальные подбор и обработка объектов», там же можно и вынрузить…. Вот куда нужно стремиться….
(6) Есть конфигурация «Конвертация данных» с помощью нее пишутся правила, хоть между одинаковыми или разными и выгружай стандартными средствами сколько хочешь с отборами или без один вид документа или сразу все… Тем более множество правил уже существует…Вот куда нужно стремится… Но эта обработка имеет право на существование, не все же умеют пользоваться КД
Согласен, «узкое решение» с «узким» применением
согласен
{ВнешняяОбработка.УниверсальныйОбменДаннымиМеждуСхожимиКонфигурациями(234)}: Ошибка при установке значения атрибута контекста (Значение): Неверный тип значения
перемПостроительЗапроса.Отбор[Счетчик].Значение = перемТекущаяСтрокаОбъекта.Отбор[Счетчик].Значение;
по причине:
Неверный тип значения
Народ конфигурация «Конвертация данных» на мой взгляд достаточно еще сырая, поверьте настраивать из нее правила обмена достаточно неудобно. А данная обработка имеет право на жизнь. Хотябы за идею….
движения по бух регистрам идут без субконто
Отбор по дате документа не работает! Задаю условие Ссылка дата => <=. Выбираю даты периода. Показать результат — ничего не дает. Убираю условие, выводит документы, причем именно в этом периоде.
Интерфейс жуткий какой-то
Вот так:
{ВнешняяОбработка.УниверсальныйОбменДаннымиМеждуСхожимиКонфигурациями(224)}: Ошибка при установке значения атрибута контекста (Текст): {(1, 1)}: Ожидается выражение «ВЫБРАТЬ»
перемПостроительЗапроса.Текст = СтрЗаменить(перемТекущаяСтрокаОбъекта.ТекстЗапроса, «ПЕРВЫЕ 0», «»);
по причине:
{(1, 1)}: Ожидается выражение «ВЫБРАТЬ»
Смогу ли я выгрузить с помощью данной обработки документы «Приходной кассовый ордер» за определенный период?
Спасибо, интересная штука.
Скачалась с расширением *.ep дописал f. Не работает. Пишет «Не может быть прочитана текущей версией…»
(18) Vigesha, через конфигуратор сначала открой, он сам сконвертирует её
у меня почему-то не может преобразовать данные XML
кто знает причину?
посмотрел код, так там вроде все норм, тип явно назначается
че ему не нравится — непонятно
хотя в СП говорится:
ПрочитатьXML (ReadXML)
Синтаксис:
ПрочитатьXML(<ЧтениеXML>, <ТипЗначения>)
Параметры:
<ЧтениеXML> (обязательный)
Тип: ЧтениеXML.
Объект, через который происходит чтение XML.
<ТипЗначения> (необязательный)
Тип: Тип.
Тип значения, которое должно быть прочитано из XML
Если тип не указан, то будет произведена попытка определения типа значения непосредственно из представления XML.
Возвращаемое значение:
Тип: Значение считанного типа; Неопределено.
Описание:
Считывает значение в формате XML. Прочитаны могут быть значения тех типов, которые могут быть записаны методом ЗаписатьXML.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Если задан тип, значение которого не может быть прочитано из XML или значение не может быть прочитано по причине неподходящего представления в XML, то будет вызвано исключение.
понял, я просто попытался из БП выгрузить номенклатуру в УТ, а структура реквизитов элемента данного справочника в обеих конфигурация различается
выдает аналогичную ошибку. теоретически конфы одинаковые (по одному шаблону). Практически — ругается, что не может записать на определенном этапе. как-то вообще можно открыть этот файл выгрузки, чтоб посмотреть, что там внутри есть?
Сам же себе и отвечу: из-за какого-то различия в конфигурациях выдавал ошибку. Заменил конфигурацию — «узкое место» прошел. Смотрю дальше.