Дебиторская и кредиторская задолженность по срокам долга. ФИФО




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

20 Comments

  1. Константин С.
    1С:Бухгалтерия 8

    1С:Бухгалтерия бюджетного учреждения 8

    1С:Бухгалтерия государственного учреждения 8

    1С:Комплексная автоматизация 8

    1С:Управление производственным предприятием 8

    Афигеть, универсальность!!!!

    Reply
  2. Ёпрст

    Фиг его мам знает, мне не видно, как я голосовал 🙂

    Reply
  3. Ёпрст

    А вообще, зачет, альтернативы нет — только ставить минус

    🙂

    Reply
  4. Ёпрст

    А вообще, нажимая на «звезду» имею или -4 или -3..

    🙂

    Reply
  5. Ёпрст

    Автор, если че, это тест

    http://forum.infostart.ru/forum17/topic96954/

    Reply
  6. warrior1985

    Просто отличнейший отчет. Так не хотелось самому писать. Автору респект и уважение — очень выручил!

    Reply
  7. mahsud

    Че-то я не понял. Минут 10 провисел отчет формируясь. Срубил процесс. ЧЯДНТ? БП 3.0, настройки по умолчанию

    Reply
  8. mahsud

    Оказывается на файловой очень долго делает. В SQL быстро. База почти 10 ГБ.

    Reply
  9. Pursuit

    Большое спасибо за обработку

    Reply
  10. Al_LM

    Добрый день! отчет отличный. беда пришла откуда не ждали — работает только под полными правами доступа. голову уже сломала в чем причина — тянет отчет все из регистра бухгалтерии «Хозрасчетный». у финансиста к нему полный доступ. однако раздел с интервалами упорно не формируется — ругается что параметр «Дней с даты отгрузки» не найден. этот параметр явно не доступен для фина — где открыть доступ и на что дать права уже сломала голову. отчет формируется в урезанном виде — на картинке затерла договоры.

    Reply
  11. elena2509

    Добрый день!

    При подключении выходит ошибка:

    Невозможно подключить дополнительный отчет из файла.

    Возможно, он не подходит для этой версии программы.

    Метод объекта не обнаружен (СведенияОВнешнейОбработке)

    Reply
  12. elena2509

    конфигурация:

    Бухгалтерия предприятия, редакция 3.0 (3.0.41.51) (http://v8.1c.ru/buhv8/)

    Copyright (С) ООО «1C», 2009 — 2015. Все права защищены

    (http://www.1c.ru)

    Reply
  13. shock.7@mail.ru

    Подскажите, пожалуйста, этот отчет выгружается в Эксель?

    Reply
  14. podo

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

    В запросе «ВТ_ОстальныеЗадолженности» нужно поменять условие на

    «НЕ ВТ_Задолженности.РегистраторОтгрузки В

    (ВЫБРАТЬ

    ВТ_ПерваяЗадолженность.РегистраторОтгрузки

    ИЗ

    ВТ_ПерваяЗадолженность

    ГДЕ

    ВТ_ПерваяЗадолженность.Контрагент = ВТ_Задолженности.Контрагент)»

    Можно добавить и договор, но мне хватило и так.

    Reply
  15. HybridDestroyer

    (10) Сделал для Вас такую возможность, чтобы можно было под урезанными правами запускать его, но нужно обязательно для урезанных прав дать права на чтение Регистр.Хозрасчетный, ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные, все документы, все справочники. Права на просмотр этих объектов можете дать выборочно.

    Reply
  16. HybridDestroyer

    (13) Любой отчет из 1С можно выгрузить в Эксель:

    —Для БП3.0 платформа 8.3, выделяете любую цифру в отчете, далее кнопка «треугольник вниз» в самом правом верхнем углу рядом с желтым значком 1С. Далее Меню ФайлСохранить какВнизу окошко «Тип файла» выбираете «Лист Excel», вбиваете «Имя файла:» в одноименном поле. И нажимаете кнопку «Сохранить».

    —Для БП2.0 платформа 8.2, выделяете любую цифру в отчете. Далее Меню ФайлСохранить какВнизу окошко «Тип файла» выбираете «Лист Excel», вбиваете «Имя файла:» в одноименном поле. И нажимаете кнопку «Сохранить»

    Reply
  17. HybridDestroyer

    (13) Да, любой отчет из 1С можно выгрузить в Эксель:

    —Для БП3.0 платформа 8.3, выделяете любую цифру в отчете, далее кнопка «треугольник вниз» в самом правом верхнем углу рядом с желтым значком 1С. Далее Меню ФайлСохранить какВнизу окошко «Тип файла» выбираете «Лист Excel», вбиваете «Имя файла:» в одноименном поле. И нажимаете кнопку «Сохранить».

    —Для БП2.0 платформа 8.2, выделяете любую цифру в отчете. Далее Меню ФайлСохранить какВнизу окошко «Тип файла» выбираете «Лист Excel», вбиваете «Имя файла:» в одноименном поле. И нажимаете кнопку «Сохранить»

    Reply
  18. HybridDestroyer

    (8) Отчет оптимизирован для больших баз данных, которые в 99% случаях работают на SQL. Файловый вариант базы всегда исполняет любые запросы намного медленней.

    Reply
  19. HybridDestroyer

    (14) Это не ошибка, т.к. переоценка валюты очень специфическая операция. Вам необходимо добавить больше хозрасчетных счетов в параметры запуска отчета для анализа данных. Запрос переписывать не нужно.

    Reply
  20. Corbis

    этот отчет формирует в разрезе дебиторскойкредиторской задолженности или можно сформировать дебиторская минус кредиторская?

    Reply

Leave a Comment

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