<?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='\
Хоть ктонить оставте отзыв, работает не работает, что бы хотелось увидеть в следующей версии
Прикрепите пожалуйста демо-ролик
(2) vyacheslavk, что конкретно должен содержать деморолик? обработка до безобразия простая, если что то не понятно, то спрашивайте.
(3) в УТ 11.1 при разнесении проплаты (ПКО) в зачет идут заказы, а не по факту реализации.
И получится что при закрытии заказов будет висеть кредиторская задолженность по этим заказам.
Было бы актуально автоматизировать и переформирование ПКО.
Или же этот механизм как-то организован в УТ 11.1?
У меня возникла необходимость в такой обработке, но возникли некие технические трудности:
1. для закрытия заказов Вы используете функцию: ПродажиСервер.ОтменитьНепоставленныеСтроки(ЗаказКлиентаОбъект, «Товары», ПричинаОтмены, Истина);
или же у Вас по другому организовано?
(5) vyacheslavk, данная функция (ОтменитьНепоставленныеСтроки) появилась намного позже, не помню с какого релиза, чем была написана обработка, потом многие перепаханные конфы, не обновляются, так что написано собственными руками.
(4) vyacheslavk,
Или же этот механизм как-то организован в УТ 11.1?
на сколько я помню, нету там автоматического закрытия, была идея еще анализировать оплаты и частичные оплаты заказов, но руки не доходят.
Каким документов происходит закрытие заказа?
(8) в УТ 11 по ее методологии документа нет в принципе, изменение все в документе заказа.
{ВнешняяОбработка.ЗакрытиеЗаказовПокупателей.МодульОбъекта(343)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(50, 34)}: Поле не найдено «ТаблицаЗаказа.Упаковка.Коэффициент»
ЕСТЬNULL(ТаблицаЗаказа.Упаковка.<<?>>Коэффициент, 1) КАК УпаковкаКоэффициент,
не работает.
Управление торговлей, редакция 11.2 (11.2.2.106)
сегодня тестану,писалось еще под 11.1
Привет!
Как прошло тестирование под 11.2?
Еще в нагрузку: закроет ли обработка заказ, который был отгружен полностью, но далее по нему была сделана корректировка реализации?
не исправлено !!!! мало кто остался на 11.1, или обработку нужно исправить под 11.2 или удалить !!!
{(50, 34)}: Поле не найдено «ТаблицаЗаказа.Упаковка.Коэффициент»
ЕСТЬNULL(ТаблицаЗаказа.Упаковка.<<?>>Коэффициент, 1) КАК УпаковкаКоэффициент,
не работает.
Управление торговлей, редакция 11.2 (11.2.3.163)
(13)
Жаль конечно, уже для для УТ11.3 надо. Сбрось обработку мне на mv@olympus.ru, может удастся ее поправить…
Спасибо, уже не надо….
(15) Мне и другим надо, если автор не хочет… Не писать же с нуля!?
Добрый день.
Под 11.3 будет на следующей недели.
(17)
Хорошо, подожду… Но судя по картинке обработки, в ней нужно что-то делать, галочки расставлять? Позвольте выразить пожелание: обработка должна иметь фоновый режим, запускаться по расписанию (например, по утрам), выполняться без участия пользователей. В форме обработки настраиваться только «Количество дней отсрочки» (например, 3 — 5 дней), на тот случай, если пользователи не ставят дату отгрузки (срок исполнения равен дате заказа, или «Резервировать к дате» — дате ожидания товара от поставщика). Все просроченные заказы более «Количество дней отсрочки» должны закрываться.
Заранее благодарю (предлагаю свои услуги по тестированию обработки на реальных базах).
(18) обработка имеет фоновый режим, и закрывает в автомате все заказы(см 3 скрин, при регистрации обработки нужно выставить нужные параметры расписания старта), по которым оплаты равны отгрузкам, в случаи если оплаты не равны, придется принимать решения самостоятельно. (А вдруг аванс весит, или отгрузили только частично)
Параметр отсрочки запоминается и учитывается при автоматическом закрытии
(19)
Склины будут?
(20) в самой публикации, третья картинка, как правильно зарегистрировать внешнюю обработку, для работы в фоновом режиме.
и читай дальше, » по которым оплаты равны отгрузкам»
на 11.1.10.199 не пашет.
Пишет «Значение индекса выходит за границы диапазона»
база серверная , 8.3.8.2027
(22)добрый день, нет возможности пртестировать. более подробно, можно ошибку?
добрый день, эта обработка подойдет под 11.4?
да, механизм заказов остался аналогичен, если что то не получится, напишите. я оперативно поправлю.
Добрый день!
К сожалению обработка не закрывает строки которые поставлены в Резерв, это можно исправить?
Добрый, было такое требование у заказчика, поправить можно. Вечером поправлю, выложу.
Было бы хорошо если обработка закрывала бы полностью отгруженные заказы.
(19)Где для фонового режима поставить количество дней?
(29) а откройте в режиме обычном, установите дату, система запомнит ее.
будет работать на УТ 11.4.6.188 ?
Добрый день. работает на 11.4.5.118.
На сколько я знаю, в 11.4.6 принципиально не чего не поменяли, если не будет, отпишись, поправлю
(32) подскажите, пожалуйста, а по какому принципу обработка ставить галочку на заказ, что его нужно обрабатывать?
(33) Если нет оплаты или же оплата равна отгрузки
Если нет оплаты или же оплата равна отгрузки, все прочие не ставит, так же предусмотрен автоматический режим, см. описание.