Тюнинг Бух 7.7.: Дебиторка, кредиторка со сроками задолженности




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

26 Comments

  1. Ish_2

    Уважаемый Арчибальд, переходите на 8 , тогда будет , что обсудить.

    А пока только о цвете. Существует правило разработчика по умолчанию :

    даёшь нестандартный цвет — давай и возможности по его изменению.

    Игнорирование этого правила вызывает грусть.

    Reply
  2. @lex

    Мдя, цвет, конечно, оччень тяжел для глаз. И не работает, зараза, в отличие от

    http://infostart.ru/projects/3744/...

    Reply
  3. Арчибальд

    (1)Не понял насчет цвета. Все открыто, в т.ч. и свойства формы.

    (2)Не работает — это как?

    Reply
  4. ZLENKO

    Для тех кто уже перешел на 8-ку:

    http://infostart.ru/projects/3295/

    Reply
  5. Арчибальд

    На полсотни скачиваний что-то комментов маловато

    Reply
  6. Ish_2

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

    сообщение.

    В (1) ,конечно, имелось ввиду «возможность для пользователя(бухгалтера)»

    Reply
  7. Свой

    отчеты запустились

    1. в подробном режиме не показывает договор, только контрагента

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

    3. не хватает итогов по суммам

    4. дата возникн задолженности — не всегда указывает, чаще просто пустая дата

    5. не хватает средств проверить почему показываемая сумма задолженности именно такая как показывается — нет расшифровок

    Резюме: отчет требует «допиливания» для комфортного использования

    Reply
  8. Арчибальд

    (7)

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

    2.Согласен. Вставил.

    4.Зависит от того, заполнена ли в справочнике договоров «ДатаВозникновенияОбязательства».

    3,5.Это отчетики, чтобы вспомнить о долгах. Расшифровкой должен быть анализ взаиморасчетов с контрагентом — но это отдельная песня.

    Reply
  9. Арчибальд

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

    Reply
  10. Artur88

    а зачем это,для взаимозачета?проводки формирует?

    Reply
  11. Арчибальд

    (10) Для формирования проводок ОБЯЗАТЕЛЕН документ-основание — это фундаментальное правило бухучета. Здесь мы просто ищем контрагентов, с которыми пора разбираться.

    Reply
  12. gtsy

    Скинь пож. на мыло а то не могу скачать gtsy@yandex.ru Дебиторка, кредиторка со сроками задолженности (Бух 7.7)

    Reply
  13. f0ma85

    Хорошая обработка нареканий нет всем доволен плюсую 🙂

    Reply
  14. LysI

    Спасибо, всем рекомендую.

    Reply
  15. LysI

    Спасибо, всё очень понравилось.

    Reply
  16. margo2007

    Цвет меня пугает 🙁

    Reply
  17. Арчибальд

    (18) А долги — нет?

    Reply
  18. margo2007

    (19)

    Чужие долги меня не касаются. 🙂

    Reply
  19. Арчибальд

    (20) Но они зеленые! :))

    Reply
  20. margo2007

    (21)

    Отчет не скачивала…

    Неужели и долги ЗЕЛЕНЫЕ ?

    Изврат… :))

    Reply
  21. j.ivanova.engeocom

    ВООЩЕ КЛАСС!!!

    Делали отчет для банка (кредит брали) — пошел на УРРРА!!!!

    Reply
  22. Drizer2000

    не понимаю для кого делаются подобные отчеты, если более 90% бухгалтеров никогда не заполняют реквизиты в договорах ДатаВозникновенияОбязательства,ДатаПогашенияОбязательства. А без заполнения этих реквизитов эта обработка бесполезна. Почему нельзя было сделать запрос по документам и из них брать дата возникновения задолженности?

    Reply
  23. Арчибальд

    (25) Drizer2000,

    А без заполнения этих реквизитов эта обработка бесполезна

    Я бы больше сказал. Без организации учета все отчеты бесполезны.

    запрос по документам и из них брать дата возникновения задолженности

    В каких документах (кроме договора) фигурирует дата возникновения задолженности? Все ДокументыВСмысле1С имеют единственную дату — ДатаДок.

    Reply
  24. Drizer2000

    Ну вы далеки от реальной жизни как работают бухгалтера. Именно по умолчанию дата задолженности — это ДатаДок

    Reply
  25. Арчибальд

    (27) Drizer2000, бухгалтерЫ работают так, как им предпишет неачальство. Разгильдяйство в отдельно взятой бухгалтерии не следует выдавать за всеобщий принцип.

    Reply
  26. khan

    Неясно почему выложены два файла, не указаны названия файлов (что это, зачем, для чего ?), нет скриншота самого отчета. Исправьте пожалуйста.

    Reply

Leave a Comment

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