<?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 года) на предприятии появляются новые операции : на предприятии возникают операции по учету на производстве.
А внедрение было выполнено для варианта учета без производства.
Пользователи не смекнули, что надо обратиться за поддержкой к внедренцам и продолжают вести учет, добавив необходимые операции по учету производства.
Только тут их поджидает масса нюансов. Хотя внешне пользователи все делают правильно : документы и вводятся и проводятся.
Но при расчете себестоимости начинают возникать сообщения об отрицательных остатках.
Хотя программа как-то считает себестоимость.. Хоть бы не считала ! Тогда бы сразу задумались и обратились за помощью.
При этом пользователи еще не знают, как находить эти отрицательные остатки, и просто игнорируют их существование.
Постепенно ошибки копятся как снежный ком. Потом ситуация становится критической и приглашают специалиста по 1С.
Тут и начинают выясняться интересные особенности в данных : по 25-му счету на проводках остатков нет, а в РАУЗ по 25 счету на затратах остатки есть.
Решение выбрано простое : в РАУЗ сделать операцию по списанию с 25 счета и поступление на 20-й счет, а на 20-м счете добавили проводку в корреспонденции со счетом 84.
Можно было создать ключ аналитики учета затрат просто : добавив новый документ с нужными статьей затрат, номенклатурной группой и подразделением, чтобы создать ключ по 20-му счету. Но кому хочется в пользовательской базе трогать документы ?
Мне не хочется .
Не хочется ни создавать новый документ, ни добавлять новую строку и проводить документ(а затем ее удалять и снова перепроводить документ).
Поэтому и была создана такая обработка.
Потом выяснилось, что интересно посмотреть на ключи аналитики по различным отборам.
Можно, конечно и в списках регистров эти отборы установить, но уж очень муторно.
Потом добавил использование полей отбора в соответствии со справочником «Настройка аналитики учета».
Это большой минус внедрецу, что он не научил в первый приход «Так делать нельзя»
так же минус внедренцу, если он не научил находить отчетами, от куда ноги растут.
И вашими суждениями показываете свою не компетенцию.
Пользователь если должен звать, второй раз, только для нового функционала. Но не в коем случае исправлении ошибок.
(3) Константин С.,
Уважаемый опытный специалист по внедрению УПП !
Вы правы в своих суждениях о том как надо внедрять УПП и другие продукты 1С:Предприятие
Наверное Вы сильно пострадали от некачественных внедрений предыдущими внедренцами.
Вы сильно сопереживаете пользователям ПП 1С, у которых возникали проблемы ввиду некачественного внедрения.
Я это понимаю…
И Вы стремитесь выявить заранее потенциально опасных внедренцев и привязать их к позорному столбу.
Ваша миссия заслуживает уважения и поддержки.
Своими гневными высказываниями Вы указываете другим менее опытным специалистам, нежели Вы сами, ошибки за которые они могут поплатиться своей карьерой.
Либо, не разглядев реальную ситуацию, указываете на то, что не так однозначна описана ситуация.
Ваше стремление карать осуждением может давать импульс другим, не таким опытным, специалистам становиться лучше.
За что Вам огромное спасибо !
(3) Константин С.,
Уважаемый опытный специалист по внедрению УПП !
Я не детально описал Вам по Вашему первому сообщению от 31.08.2015 г., про особенности внедрения. Дело было так :
В первичном внедрении участвовала компания внедренцев 1С.
Во втором случае — отдельно взятый программист, не имеющий отношения к предыдущей компании внедрения 1С.
То есть внедрение, которое выполнялось в первый раз, и текущая работа по выявлению и устранению ошибок : Выполнялись разными специалистами.
Кроме того : при первом внедрении еще не было операций по производственному учету, хотя предприятие готовилось к производству.
Так что ошибок с отрицательными остатками не возникало. И у меня нет претензий к работе первой волны внедрения.
Наверное, это не меняет в целом ситуацию в Ваших глазах.
Вам видней.
Пишите еще, Ваши комментарии очень важны для менее опытных специалистов по внедрению УПП.
Еще раз спасибо за Ваши гневные тирады. Это бодрит.
(5)
Во втором случае — отдельно взятый программист, не имеющий отношения к предыдущей компании внедрения 1С.
мне как раз аналогичным, частенько, приходится заниматься.
это бесполезное занятие.
Просто иногда, у меня такое случалось, автор статьи «некорректно» составил описание. Оно может ввести в заблуждение, почему бы не поправить.
А обработка, если ее писали для нужд, значит у нее было практическое применение. Другое что она может иметь «узкое» применение.