Восстановление настроек плана счетов и очистка некорректных рабочих счетов в БГУ 1.0




Принцип обмена данными из 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='\

32 Comments

  1. infekla

    По какому принципу обработка определяет некорректность счета?

    Reply
  2. Sashares

    (1)Выполняет те же действия, что выполняются при записи счета при восстановлении настроек плана счетов. Если записать не удалось — значит настройка кривая.

    Обычно это бывает, когда дата начала у КПС больше, чем дата окончания в самом счете.

    Такие записи не корректны.

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

    Reply
  3. emilliya

    (2) Стандартный механизм восстановления счетов.

    Он действует для всех счетов Плана счетов, в нем фильтры не указаны.

    Если счет был открыт ранее 2019 года, и возможно в нем что-либо меняли, новых счетов с тем же кодом — нет,

    обработка этот счет то же «восстановит»?

    Можно ли ею огульно пользоваться?

    Reply
  4. Sashares

    (3)

    Можно ли ею огульно пользоваться?

    Любым инструментом нужно пользоваться осмысленно.

    По кнопке «Очистка некорректных рабочих счетов» будут очищены только те рабочие счета, которые не корректны по мнению типовой конфигурации и мешают использовать типовую функциональность.

    Эти настройки в любом случае кривые, и они вам аукнутся если не сейчас, то потом, когда и для этих счетов изменится период действия (привет минфину!).

    (3)

    этот счет то же «восстановит»

    Если посмотреть что делается при восстановлении настроек в типовой конфигурации, то увидим следующее:

    1 — устанавливаются реквизиты ЗапретитьИспользоватьВПроводках, КОСГУДт, КОСГУКт, ДатаОкончания;

    2 — заполняется регистр сведений КОСГУСчетов допустимыми КОСГУ;

    3 — заполняется регистр сведений ВидыКБКСчетов допустимыми видами КБК для данного счета.

    Эти настройки будут заполнены типовыми настройками.

    Вряд ли типовые настройки могут как-то повредить или что-то сломать.

    По крайней мере я не могу придумать такой ситуации.

    Reply
  5. germax

    Есть же типовая с сайта обновлений. поменяйте 2017 на 2018.

    Reply
  6. Sashares

    (8)Да кто против.

    Reply
  7. Svetlana_E

    (8) А где можно ее посмотреть?

    Reply
  8. admrabota

    (8)

    Есть же типовая с сайта обновлений. поменяйте 2017 на 2018.

    Поменял, не находит проблемных.

    Reply
  9. admrabota

    У меня стандартная не находит проблемных, после обновы 56.7 получились двойники, все новые счета без КЭК и если делать отбор по дате, то новых не видно, соответственно в платежках тоже я их не вижу, при этом восстановление настроек по умолчанию не проходит. Ваша обработка отличается от стандартной? Помогло кому-то? как эти стартмани получить? может так денежку куда-то кинуть? admrabota@mail.ru

    Reply
  10. Leon_Ep

    (14) Ситуация один в один :(((( В старых — дата окончания 31.12.2018 не появилась. В новых — ничего не заполнено. Выбрать ничего нельзя. Стандартная(заменила 2017 на 2018) никаких проблемных не находит. Я даже вручную удалила все рабочие счета вообще. Но восстановление настроек по умолчанию все равно вылетает с ошибкой где-то на 40%. Поможет ли эта обработка?

    Reply
  11. Sashares

    (14)

    Помогло кому-то?

    А вам помогло?

    Reply
  12. Sashares

    (15)

    Поможет ли эта обработка?

    Должна. Мне в аналогичной ситуации помогла.

    Reply
  13. admrabota

    (16)

    Спасибо за файлик, утром проверю, отпишусь.

    Reply
  14. admrabota

    (16)

    Огромное спасибо, помогло, восстановление прошло, КЭКи есть.

    Reply
  15. Sashares

    (19) Отлично =)

    Reply
  16. Svetlana_E

    (17) Огромное спасибо!!!!! Помогла!!!!! Жаль, что скачала только сегодня, а не вчера — одну базу руками ночью правила :((((

    Reply
  17. Agema

    (29) огромное спасибо! Выручили, а то с одной базой мучился, никак не мог понять. И с портала 1С обработка не помогла найти неправильный рабочий счет и вручную поиск не помог, а Ваша обработка сразу его показала. Умудрились ввести рабочий счет с закрытым в 2017 году счетом 302.91 и КПС с 2019-го года.

    Reply
  18. Sashares

    (31)Магия=)

    Reply
  19. marirveze

    (33)

    Спасибо, помогло!

    Reply
  20. Sashares

    (34)Пожалуйста =)

    Reply
  21. lesogorsk-admin

    Спасибо большое!!! Всё работает))))

    Reply
  22. AlexYamr

    Спасибо огромное, обработка очень помогла!

    Reply
  23. user683336_cbruno

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

    Reply
  24. Sashares

    (46)Чем помочь?

    Reply
  25. user683336_cbruno

    (47)Сколько стоит обработка: Восстановление настроек плана счетов и очистка некорректных рабочих счетов в БГУ 1.0

    Reply
  26. Sashares

    (48) 1 sm

    Reply
  27. Vestr

    Часть баз у подопечных ПС не обновился) После обработки всё прекрасно прошло)

    Reply
  28. user1230010

    День добрый!

    Аналогичная проблема со счетами.

    Как можно получить обработку?

    Reply
  29. user1230010

    (22) День добрый!

    Аналогичная проблема со счетами.

    Как можно получить обработку?

    Reply
  30. user1230010

    (44) День добрый!

    Аналогичная проблема со счетами.

    Как можно получить обработку?

    Reply
  31. user1230010

    (31) День добрый!

    Аналогичная проблема со счетами.

    Как можно получить обработку?

    Reply
  32. user1230010

    (19) День добрый!

    Аналогичная проблема со счетами.

    Как можно получить обработку?

    Reply

Leave a Comment

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