Анализ взаиморасчетов с контрагентами для 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='\

39 Comments

  1. dummy

    ЗаголовокСистемы(ОрганизацияНазвание+» Егоров Д.М. тел.(9063)818181)»);

    вот это нафига, а? :-

    Reply
  2. Димча

    Это рудимент. Включил, чтобы бухи мой телефон не забыли :).

    Надо убрать.

    Reply
  3. Craig

    Хороший отчет, безусловно плюс)

    Reply
  4. Craig

    101 раз качнули, только 10 плюсов, поддержите обработку, отчеты то хорошие, функциональные) да и ошибок не каких не вылезало

    Reply
  5. Димча

    (4) Приятно 🙂 Спасибо за тёплые слова.

    Reply
  6. das

    Отчет очень понравился.

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

    (4) 10/101 — весьма хорошая статистика, имхо…

    Reply
  8. Lionarus

    Неплохая ертешка, спасибо….

    Reply
  9. danilov_co

    У меня так:

    Возврат глПредставлениеАдреса<<?>>(Контрагент.ЮридическийАдрес);

    {D:TESTEXTFORMSАНАЛИЗ.ERT(187)}: Функция не обнаружена (глПредставлениеАдреса)

    Возврат глПредставлениеАдреса<<?>>(Контрагент.ПочтовыйАдрес);

    {D:TESTEXTFORMSАНАЛИЗ.ERT(189)}: Функция не обнаружена (глПредставлениеАдреса)

    Возврат глПредставлениеАдреса<<?>>(Контрагент.ЮрФизЛицо.ЮрАдрес);

    {D:TESTEXTFORMSАНАЛИЗ.ERT(224)}: Функция не обнаружена (глПредставлениеАдреса)

    Кто-то использует с «Бухгалтерский учет» для Украины 7.70.025?

    Reply
  10. alexmal

    Отчет отличный. Безусловно +!

    (9) Подправил для 1С:Бухгалтерия для Украины и закачал на infostar.

    Reply
  11. alexmal
  12. e_kazakova

    Ставлю плюс, но вижу недостаток — в ИНВ-17 сальдо свернутое по контрагенту. Это неправильно, когда например у контрагента два договора : по одному — сальдо кредитовое, а по-другому — дебетовое. Тоже самое в справке -приложении к ИНВ-17. Фирменный отчет 1С «Инвентаризация расчетов с контрагентами» кстати формирует правильно развернуто, но к сожалению не делает справку- приложение.

    Reply
  13. solyan

    Класс. +1

    Reply
  14. dgeorg

    Очень хорошо +

    Reply
  15. Svetlana_E

    Очень понравилось! Отлично работает и Бух4.5, и в УСН!

    +++

    Reply
  16. tso_s

    МААЛОООДЕЦЦЦЦЦЦЦ!!!! супер +100

    Reply
  17. Доня

    Замечательно!

    +

    Reply
  18. N-Leb

    Вы мой спаситель!

    Reply
  19. OLEZHEK

    Однако работает, супер, 5+ ! 😀

    Reply
  20. aparnikov_ve

    Отличная штука

    Reply
  21. aparnikov_ve

    Детализация сальдо взаимных расчетов по периодам. Бухгалтера говорят что выводит суммы без НДС. Сам еще не смотрел. Может подскажете что?

    Reply
  22. artbear

    (0) Если на забалансовых счетах есть субконто Контрагенты/Договора, то выводит неверное сальдо с учетом данных по этим забалансовым счетам 🙁

    Как минимум в списке дебиторов/кредиторов

    ИМХО нужно исправлять, все-таки балансовые и забалансовые счета.

    Это при работе по умолчанию,

    если непосредственно задать список счетов, то ошибки нет!

    Reply
  23. buhg@k-maestro.ru

    Спасибо, вот это отчет!!!

    Два дня искала, столько перепробовала,

    этот лучший.

    Еще СПБ!!!

    Reply
  24. elya_wira

    Большое спасибо! Все, что нужно, все есть. Безусловно Плюс.

    Reply
  25. Rio3000

    Искал очень долго приложение к ИНВ-17, а тут помимо приложения, еще и целый букет отчетов в придачу.

    Спасибо автору! Очень нужная и хороший отчет +

    Reply
  26. ambar

    Отличный набор отчетов,все что желала душа нашего нового экономиста,и даже сверх того.

    Спасибо+

    Reply
  27. Evgueni

    Хороший набор отчетов, для меня самое то…

    Reply
  28. LysI

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

    Reply
  29. Igortid

    Плюсуйте люди!!!! что вам жалко?

    Reply
  30. Leanna

    Спасибо пользуюсь

    Reply
  31. Drizer2000

    Хороший отчет,только не понял, что делают в этим отчетах суммы задолженностей по документам «формирование записей книги покупок»?

    Reply
  32. Димча

    Скорее всего не выбраны счета взаиморасчётов в разделе «Настройка», вернее выбраны все счета, где ведётся аналитика по Контрагентам.

    Reply
  33. Wladimir

    Спасибо, полюзуемся, хороший отчет — многофункциональный, только скажи пожалуйста почему иногда задваиваются обороты? Я конечно попонял, что задваиваются авансы, но мне кажется этого не должно быть, ведь в стандарном акте сверки с оборотами все в порядке. Но не смотря на эти мелочи безусловный и огромный+.

    Reply
  34. YuliaYVS

    Идея хорошая, обработка тоже экономит кучу времени… Можно её модифицировать под БП 8.2, пока 1С сама не догадается включить её в комплект поставки. Программа предназначена для облегчения труда бухгалтеров, пора бы уже и включить её, вещь очень нужная. СПАСИБО!

    Reply
  35. PtizaPtiza

    Жалко что акт сверки по всем поставщикам а не по отдельности(((

    Reply
  36. www2007

    Давно скачал, вот и пригодилось недавно.. Автору спасибо, функциональная вещь!!

    Reply
  37. skurser

    Спасибо пригодилась

    Reply
  38. Svetlana_E

    к автору: А что-нибудь похожее для 8.2 вы не писали?

    Reply
  39. ToJIuK

    Все работает отлично . автору большое спс. + поставил

    Reply

Leave a Comment

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