<?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='\
Я правильно поняла, что «фишка» в том, что все сделано на операциях БУ?
http://infostart.ru/public/387452/ .
Что касается алгоритма действий, то для ERP практически та же последовательность действий описана в
Есть подобная и для УПП.
Для большинства документов так оно и есть. Но при расчете себестоимости Вы и сами какие-то алгоритмы применяете. А если встречный выпуск встретится, то Вашими «благими пожеланиями будет устлана дорога в ад» )))
Большие конфигурации с большими возможностями не могут работать только на операциях БУ )))
(1) PAVI, Нет, это сделано не на проводках, а на конструктореhttp://infostart.ru/public/384253/
(2) PAVI, Да не работаю я на регистрах БУ)) Фишка в том что с помощью конструктора упомянутого выше я быстрое делаю под конкретное производство конкретные «документы» без всего лишнего. Т.е. как бы пишу решение с нуля под заказчика. Конструктор это позволяет. Подход «написанное под задачу решение» vs «адаптированное универсальное решение» — в этом суть поста. По поводу того какие алгоритмы для расчета встречки используются в ERP/УПП я лучше умолчу.
(4)
Как понимать эту фразу? Механизмы используемые в типовых плохие или ваши хорошие?
(5) TODD22, ну про охрениарды денег которые могут «нарисоваться» в РАУЗЕ при встречных потоках затрат знает наверно каждый внедренец)) Это уже байка такая. Вот хорошая статья :http://infostart.ru/public/273813/ Я мыслю так: если система не знает как рассчитывать встречку она должна ее сначала найти, потом либо итерационно (либо как в раузе) рассчитать и тот и тот способ обладает недостатками которые отлично расписаны в приведенной ссылке — это проблема как раз универсального решения. Если в решении жестко прописать как должна рассчитываться с/стоимость в случае со встречным выпуском, то и проблемы не будет. Т.е. прописать также как считал бы человек на калькуляторе. Не будет же экономист чтобы посчитать затраты искать решение системы СЛУ, правильно?
Ошибки
1.В 8.3.6 (при снятии совместимости) зарезервирован термин «ПараметрыВыбора». Соответственно, при выборе цеха ошибка присвоения, например:
ПараметрыВыбора = Новый Структура(«ВидРесурсов», ЗначениеОтбора(Объект.ВидОперации,Элемент.Имя));
2.Оператор «Выполнить» не доступен в веб-клиенте.
(7) Franco, Спасибо. «ПараметрыВыбора » исправил. По поводу Выполнить на веб клиенте чет не соображу как заменить. Похоже никак. Не будет на веб клиенте это работать
(8)
Никак. Только думать, как обрабатывать на сервере
(8)
все! на этом все закончилось?
(10) pro1c@inbox.ru, Если имеется ввиду будут ли еще публикации с «конструктором» — надеюсь что будут.