<?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) Автоматически (кнопка «Заполнить») для заданного контрагента за установленный временной интервал.
Или вручную. Документы, уже отобранные в маршрутные листы, не попадают в заполняемый документ.
Есть некоторые вопросы к методике учёта развозов…
1) Не добавление в маршрутный лист накладных ранее включенных в развоз — ведет к проблемам в случае если в ходе предыдущего рейса не удалось доставить накладную клиенту.
2) Рейс машины проходит мимо множества клиентов (Торговых точек), и отбирать каждого клиента думается несколько трудозатратно. Может есть смысл отбирать по списку Клиентов попадающих в какой-то район доставки? Например используя механизм свойств (создать Свойство «РайонДоставки»)?
В частности механизм доставки в наших конфигурациях создан. При этом Клиенты (Торговые точки) сгруппированы свойствами по районам доставки и по графику доставки (дни недели доставки данному клиенту).
Кроме того в 1с8 УТ реализован механизм Заказ-Накладная. Это позволяет разделить процесс сбора заказа и реализацию заказа через Сбор на Складе. Печатается свод заказов на клиентов попадпющих под нужные районы и срок доставки, затем начинается бор заказов и погрузка в машину. Только при сборе заказа появляется Реализация.
В случаях недоставки клиенту накладной (по разным причинам), ставится отметка в МаршЛисте о факте доставки/недоставки.
По результатам доставки могут возникать корректировки накладных (например клиент отказался от некоторых позиций)… Соответвенно искать нужные накладные для корректировки удобнее через МаршЛист…
Есть ещё куча отработанных идей…
при попытке создать маршрутный лист прога выдает сообщение
спрРайоны = СоздатьОбъект(«Справочник.СвойстваДоставки»);
{Документ.МаршрутныйЛист.Форма.Модуль(543)}: Неудачная попытка создания объекта (Справочник.СвойстваДоставки)
Что это?
(5) Неудачная попытка создания объекта Справочник.СвойстваДоставки говорит о том, скорее всего, что в конфигурации НЕТ такого справочника по причине «не поставили галку на него при объединении конфигураций».
Есть справочники :
Виды районов доставок
Свойства доставок
Виды графиков доставок
автомобили
(7) Ошибку исправил!
«Дополнения не мешают обновлению конфигурации!» — за это отдельное спасибо
попробую. что выйдет — отпишу
(5) Неудачная попытка создания объекта Справочник.СвойстваДоставки говорит о том, скорее всего, что в
sveta210180 31.10.11
Есть справочники :
Виды районов доставок
Свойства доставок
Виды графиков доставок
автомобили
Ответили:
BorisBelov 03.11.11
(7) Ошибку исправил!
Какую ошибку??
(11) Справочник.СвойстваДоставки и Справочник.СвойстваДоставок. Была разноголосица…
Цитата :
«Сохраните вашу базу данных в архивную копию.
2. В режиме Объединение конфигураций… Выберите скачанный файл 1Cv7.MD и отметьте «галками» документ «МаршрутныйЛист», справочники «Автомобили», «ВидыРайоновДоставок», «ВидыГрафиковДоставок», «СвойстваДоставок» и отчет «ОтчетПоМаршрутнымЛистам» (ТОЛЬКО ЭТО!).»
А в журналы документов разве не надо добавит «Доставка» ? (поставить «галку»)
Установилось все отлично,работает все.Взял эту обработку за основу и чуть подправил для свей организации,пока вроде все довольны.Спасибо.Ну и конечно отдельное спасибо за возможность обновления конфигурации.
Хорошее дополнение к торговле. Взял за основу…немного доработал под клиента..Спосибо огромное
возьму и посмотрю
спасибо
Разработка интересная, но есть некоторые недочеты.
1. При пометке на удалении документа «маршрутный лист» и создании нового, документы, находящиеся в помеченном на удаление, не подтягиваются в новый.
2. В идеале нужно отбирать документы реализации не по дате создания, а по дате отгрузки. Но для этого нужно в документе реализация сделать дополнительный реквизит «Дата доставки». Может у нас такая система, но попадаются такие клиенты (особенно бюджетники), которым пакет документов нужен сегодня, а везти нужно через неделю-месяц.
3. При отборе в ручном режиме хотелось бы, чтоб при клике по ТЗ документа и открытии журнала, в журнале устанавливался период, который указан в маршрутном листе.
Реализация понравилась. Взял как пример для своей обработки.