Поиск, изучение и создание ключей аналитики в УПП для РАУЗ




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

6 Comments

  1. Константин С.

    Странная обработка не понял ее назначение 🙁

    Для чего эта обработка: для исправления ошибок в учете затрат.

    всегда казалось что в этом случае нужно смотреть Отчет РАУЗ с группировками по Ключам.

    Reply
  2. Designer1C

    (1) Константин С., Это для случаев, когда в УПП уже работают, хотя УПП еще не внедрена.

    Поясню, как это бывает :

    Одно внедрение уже произошло. То есть пользователям показаны основные приемы работы с программой.

    И расчет себестоимости тоже показан. Пользователи все делают так, как им было объяснено. И все было хорошо. Первое внедрение прошло очень грамотно

    Но потом (через 2 года) на предприятии появляются новые операции : на предприятии возникают операции по учету на производстве.

    А внедрение было выполнено для варианта учета без производства.

    Пользователи не смекнули, что надо обратиться за поддержкой к внедренцам и продолжают вести учет, добавив необходимые операции по учету производства.

    Только тут их поджидает масса нюансов. Хотя внешне пользователи все делают правильно : документы и вводятся и проводятся.

    Но при расчете себестоимости начинают возникать сообщения об отрицательных остатках.

    Хотя программа как-то считает себестоимость.. Хоть бы не считала ! Тогда бы сразу задумались и обратились за помощью.

    При этом пользователи еще не знают, как находить эти отрицательные остатки, и просто игнорируют их существование.

    Постепенно ошибки копятся как снежный ком. Потом ситуация становится критической и приглашают специалиста по 1С.

    Тут и начинают выясняться интересные особенности в данных : по 25-му счету на проводках остатков нет, а в РАУЗ по 25 счету на затратах остатки есть.

    Решение выбрано простое : в РАУЗ сделать операцию по списанию с 25 счета и поступление на 20-й счет, а на 20-м счете добавили проводку в корреспонденции со счетом 84.

    Можно было создать ключ аналитики учета затрат просто : добавив новый документ с нужными статьей затрат, номенклатурной группой и подразделением, чтобы создать ключ по 20-му счету. Но кому хочется в пользовательской базе трогать документы ?

    Мне не хочется .

    Не хочется ни создавать новый документ, ни добавлять новую строку и проводить документ(а затем ее удалять и снова перепроводить документ).

    Поэтому и была создана такая обработка.

    Потом выяснилось, что интересно посмотреть на ключи аналитики по различным отборам.

    Можно, конечно и в списках регистров эти отборы установить, но уж очень муторно.

    Потом добавил использование полей отбора в соответствии со справочником «Настройка аналитики учета».

    Reply
  3. Константин С.
    При этом пользователи еще не знают, как находить эти отрицательные остатки, и просто игнорируют их существование.

    Это большой минус внедрецу, что он не научил в первый приход «Так делать нельзя»

    Но при расчете себестоимости начинают возникать сообщения об отрицательных остатках.

    так же минус внедренцу, если он не научил находить отчетами, от куда ноги растут.

    И вашими суждениями показываете свою не компетенцию.

    Пользователь если должен звать, второй раз, только для нового функционала. Но не в коем случае исправлении ошибок.

    Reply
  4. Designer1C

    (3) Константин С.,

    Уважаемый опытный специалист по внедрению УПП !

    Вы правы в своих суждениях о том как надо внедрять УПП и другие продукты 1С:Предприятие

    Наверное Вы сильно пострадали от некачественных внедрений предыдущими внедренцами.

    Вы сильно сопереживаете пользователям ПП 1С, у которых возникали проблемы ввиду некачественного внедрения.

    Я это понимаю…

    И Вы стремитесь выявить заранее потенциально опасных внедренцев и привязать их к позорному столбу.

    Ваша миссия заслуживает уважения и поддержки.

    Своими гневными высказываниями Вы указываете другим менее опытным специалистам, нежели Вы сами, ошибки за которые они могут поплатиться своей карьерой.

    Либо, не разглядев реальную ситуацию, указываете на то, что не так однозначна описана ситуация.

    Ваше стремление карать осуждением может давать импульс другим, не таким опытным, специалистам становиться лучше.

    За что Вам огромное спасибо !

    Reply
  5. Designer1C

    (3) Константин С.,

    Уважаемый опытный специалист по внедрению УПП !

    Я не детально описал Вам по Вашему первому сообщению от 31.08.2015 г., про особенности внедрения. Дело было так :

    В первичном внедрении участвовала компания внедренцев 1С.

    Во втором случае — отдельно взятый программист, не имеющий отношения к предыдущей компании внедрения 1С.

    То есть внедрение, которое выполнялось в первый раз, и текущая работа по выявлению и устранению ошибок : Выполнялись разными специалистами.

    Кроме того : при первом внедрении еще не было операций по производственному учету, хотя предприятие готовилось к производству.

    Так что ошибок с отрицательными остатками не возникало. И у меня нет претензий к работе первой волны внедрения.

    Наверное, это не меняет в целом ситуацию в Ваших глазах.

    Вам видней.

    Пишите еще, Ваши комментарии очень важны для менее опытных специалистов по внедрению УПП.

    Еще раз спасибо за Ваши гневные тирады. Это бодрит.

    Reply
  6. Константин С.

    (5)

    В первичном внедрении участвовала компания внедренцев 1С.

    Во втором случае — отдельно взятый программист, не имеющий отношения к предыдущей компании внедрения 1С.

    мне как раз аналогичным, частенько, приходится заниматься.

    И Вы стремитесь выявить заранее потенциально опасных внедренцев и привязать их к позорному столбу.

    это бесполезное занятие.

    Просто иногда, у меня такое случалось, автор статьи «некорректно» составил описание. Оно может ввести в заблуждение, почему бы не поправить.

    А обработка, если ее писали для нужд, значит у нее было практическое применение. Другое что она может иметь «узкое» применение.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *