<?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='\
а чем она лучше той, которая на ИТС?
а регистрация движений документа?
(1) О какой именно обработке из универсальных на диске ИТС идет речь?
* Настройка технологического журнала
* Конвертация внешних обработок
* Консоль системы компоновки данных (управляемое приложение)
* Свертка информационной базы
* Выгрузка данных в реляционные структуры
* Загрузка данных из табличного документа
* Изменение конфиденциальной информации
* Консоль запросов
* Поиск и замена значений
* Раскрашивание кода
* Универсальные подбор и обработка объектов
* Форматирование текста
* Полнотекстовый поиск в данных
* Консоль заданий (Новый раздел!)
(2) Для меня регистрация движений документов не актуальна, т.к. РИБ не использую. Если необходимо можете сами дописать данный функционал, тем более что по времени это займет не более 5 минут.
>а чем она лучше той, которая на ИТС?, — на сарае … , а там дрова лежат.
молодец.
(3) действительно, почему то в универсальных обработках на диске ИТС уже отсутствует обработка, позволяющая управлять регистирацией объектов к обмену…странно…
я до сих пор пользуюсь ей, брал именно с ИТС года 2 назад.
(5) … не потому ли, что обработка сия включена в состав «Конвертации данных»?
Я использовал вариантотсюда с некими своими доработками. Очень помог.
Но и этот имеет право на жизнь)
При открытии твоей обработки в УТ 10.3.7.8 Выдает ошибку:
«{Форма.Форма(223)}: Ошибка при установке значения атрибута контекста (Текст): {(43, 2)}: Неоднозначное поле «ВидОбъекта.Ссылка»
<<?>>ВидОбъекта.Ссылка КАК Ссылка
Построитель.Текст = «ВЫБРАТЬ ВложенныйЗапрос.Ссылка ИЗ (» + ТекстЗапроса + «) КАК ВложенныйЗапрос»;
по причине:
{(43, 2)}: Неоднозначное поле «ВидОбъекта.Ссылка»
<<?>>ВидОбъекта.Ссылка КАК Ссылка»
(8) Исправил
(0) Ты не мог бы добавить свою обработку также в раздел «Каталог → УПРАВЛЕНИЕ ДАННЫМИ, ОБРАБОТКА → Обмен данными»? (Дополнительный раздел) Я по нему искал..
А вообще — отличная разработка у тебя. Она универсальная, моя просто под конкретные задачи, твоя же более широкая, из-за этого лично для меня она менее удобна, но если бы нашел ее, то конечно свою бы не создавал))
<<?>>Кассы.Ссылка <> &ЭтотУзел
Результат = Запрос.Выполнить();
по причине:
{(6, 2)}: Неоднозначное поле «Кассы.Ссылка»
<<?>>Кассы.Ссылка <> &ЭтотУзел
Обработка хорошая. Но нужно сделать транзакции по количеству объектов, чтобы можно было ввести количество объектов в одной транзакции. Если запустить эту обработку сейчас, остальные пользователи будут простаивать с блокировками.
Если выбрать все документы и попытаться отобрать из например за пол года (УПП) то возникает ошибка переполнения sql таблиц в запросе (>256), а так обработка полезная.
Обработка полезная, спасибо автору
Отдельное спасибо за то, что обработка позволяет формировать отборы по реквизитам документов.
(1) crystaleye,
Если выбрать все документы и попытаться отобрать из например за пол года (УПП) то возникает ошибка переполнения sql таблиц в запросе (>256), а так обработка полезная.
Собственно вопрос а как можно это дело обойти?
За обработку плюс, спасибо.
Хотел сделать регистрацию договоров контрагентов с отбором по владельцу (контрагенту). Не получается. Отбор: Ссылка.владелец.Код — выставляю — отбираю — перехожу в окно отобранных элементов. Там все договора, что есть в базе — отбор не сработал. Возвращаюсь на главную страницу — строка с отбором исчезает — отбор пустой.
Тестировалась на УТ для Украины.
очень неплохая обработка, но остается очень большой полигон для доработки и творчества
Thanks, очень помогла как раз были расхождения в доках в голове и дочке
Спасибо большое. Быстрый отбор внизу формы очень приятная вещь. Потому что каждый раз формировать запрос и задавать параметры бывает очень муторно, если нужно зарегистрировать, например, несколько видов документов из определенного временного промежутка и конкретным контрагентом… Не хватает, пожалуй, метода регистрации «ТОЛЬКО движения документов».
Обработка отличная, плюсанул за неё. Но выявил один большой глюк ! Автору просьба принять на вооружение :
Пусть у нас есть база «1» и база «2»
Так вот, если в базе «1» создали документ, потом перегрузили его в базу «2», затем в базе «1» этот документ пометили на удаление и удалили. А потом за этот период сделали в «1» базе «отмену регистрации изменений» для документов, то удаленный документ все равно остается в очереди на выгрузку, т.е. удалится и во «2» базе после обмена. А это не есть гуд.
Для любой конфигурации подходит?
Работает. Свое название оправдывает на все 100%