Дебиторская и кредиторская задолженность по срокам долга (просроченная задолженность)




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

44 Comments

  1. support

    Тест

    Reply ↓
  2. osiris

    Так это пустышка.

    Reply ↓
  3. McLer

    (2) в смысле пустышка? прикреплена обработка

    Reply ↓
  4. osiris

    У меня firefox он видимо «глотает» расширение. Обработка-epf, но erf (отчет) открылось.

    Reply ↓
  5. McLer

    (4) ну хорошо)

    Reply ↓
  6. Ошибка в модуле объекта(640) мРежимВводаПериода не являет. объектом

    Reply ↓
  7. McLer

    (6) отчет был сделан на основании типового очета конфигурции УТ 10.3.13.2, так же работате в конфигурации УПП. А Вы скорее всего его пытаетесь открыть в другой конфигурации, в которой нет объектка Отчет.УниверсальныйОтчет чем и вызвана такая ошибка.

    Reply ↓
  8. daddy-don

    Так в УПП в каждом документе реализации выводится же задолженность по договору (правда, на уровне плачено-не оплачено, без привязки к срокам).

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

    Какие нюансы отличий этой обработки? К чему идет привязка — к дате договора и срокам просрочки в нем же?

    Reply ↓
  9. McLer

    (8) к сроку просрочки в ней же. Я в описание написал что если конфигурация доработанная таким образом что отгрузки не запрещаются, то отчет очень полезен.

    Reply ↓
  10. daddy-don

    (9) т.е. доработка понимается — достаточно только разблокировать в документах запрет на отгрузку просроченных по задолженности, и все?

    Достаточно ли заполнять типовые условия дебиторской задолженности (срок в договоре), или необходимо еще что-то дописывать плюсом по условиям?

    И какой ставить учет в договоре — должен стоять «по договору в целом», или для получения результата в вашей обработке это не обязательно?

    Reply ↓
  11. McLer

    (10)

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

    Да достаточно.

    Достаточно ли заполнять типовые условия дебиторской задолженности (срок в договоре), необходимо еще что-то дописывать плюсом по условиям?

    Да достаточно заполнять срокт и ничего дополнительно дописывать не надо.

    для получения результата в вашей обработке это не обязательно?

    не важно какой учет стоит в договоре.

    если необходима информация где и что необходимо дописать чтобы разрешить отгрузку могу помочь.

    Reply ↓
  12. daddy-don

    (12) да вроде все понятно, спасибо.

    В РТиУ в ПриПроведении убрать блокировку проведения. Так ведь?

    Reply ↓
  13. McLer

    (12) Да так, только там в ОбработкеПроведения РТиУ вызывается метод в общем модуле.

    По тексту сообщения («Превышено допустимое число дней задолженности по договору«) можно быстро найти необходимую процедуру.

    Reply ↓
  14. Rasty_

    А сохраните, пожалуйста, для Платформы 8.1!

    Reply ↓
  15. McLer

    (14) выложил для 8.1

    Reply ↓
  16. Rasty_

    как то все же не правильно он работает…. по контрагенту уже нет задолженности, а он её выдает..

    Reply ↓
  17. Rasty_

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

    Reply ↓
  18. McLer

    (17) и так анализируются задолженность с учетом дней просрочки!

    у вас скорее всего неправильно заполнен регистр «ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов», это значит что в документах в которых выбран договор с включенным признаком «ведения по документам взаиморасчетов» не всегда указываются документы преодоплаты или отгрузки. проверить это можно сформировав универсальный отчет по этому регистру с группировками: контрагени, документ расчетов с контрагентами, документ движения (регистратор). В очтете видна картина за какую отгрузку каким документов оплатили и также за какое постуление мы заплатили за какое нет и тем самым выделить неправильно оформленные документы.

    Reply ↓
  19. Rasty_

    Дело в том, что у нас разрознены филиалы и Платежки от контрагентов вводятся только в одном филиале. Поэтому нет возможности указывать какая платежка к какому документы относится. Есть ли какой-либо способ всё таки получить дебиторку?

    Reply ↓
  20. McLer

    (19) Или надо чтобы платежки мигрировали в остальные филиалы, или разносить эту информацию только в одном филиале где офорлмяются платежки и соответвенно отчет сможет работать только в нем. Я выложил обработку http://infostart.ru/public/81141/ которая заполняет необходимую информацию в документах.

    P.S.

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

    Reply ↓
  21. anig99

    (20) Никто не ждёт испанскую инквизицию!

    Собственно обработка тянет на то, чтобы схватить минус. Почему?

    1. Куцее описание

    2. Минимальное изменение относительно типового отчета.

    Что сделать, чтобы минус не появился? Расширить описание отчета(максимально) + накатать статью по правильному ведению учета по документам расчета и его контроля.

    Тут в свое время был бум отчетов до дебиторке, которые получали цифры по просроченному долгу при любых условиях ведения учета.

    Reply ↓
  22. McLer

    (21) описание немного дописал.

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

    «Тут в свое время был бум отчетов до дебиторке, которые получали цифры по просроченному долгу при любых условиях ведения учета» если бы дал ссылку думаю люди были бы тебе благодарны.

    Reply ↓
  23. anig99

    Мои в порядке публикации (статьи и обработки)

    http://infostart.ru/public/20221/

    http://infostart.ru/public/20962/

    http://infostart.ru/public/21038/

    http://infostart.ru/public/21095/

    http://infostart.ru/public/21672/

    http://infostart.ru/public/58966/

    есть опыт доработки под банковские дни, под 8.2 управляемые формы и т.д. Просто сейчас нет времени писать универсальное решение.

    Других авторов

    http://infostart.ru/public/19049/ -аналог Вашего

    http://infostart.ru/public/20074/ — тоже

    http://infostart.ru/public/19195/ — тоже

    http://infostart.ru/public/21968/

    http://infostart.ru/public/75917/

    http://infostart.ru/public/19212/

    Reply ↓
  24. McLer

    (23) спасибо. щас себе что-нибудь интересное подберу

    Reply ↓
  25. Rasty_

    Спасибо, попробую.

    Reply ↓
  26. artspeed

    Начал разбираться в отчете. В целом неплохо, но смутило поле интервал, которое заполняется 50000 и больше не меняется. Автор — дай описание этому полю пж. Не понимаю, для чего оно…

    Reply ↓
  27. McLer

    (26) artspeed, стоит начать с того что отчет в реквизите «Интервал» использует типовой справочник Настройка интервалов и его значения от отчета не зависят. В нем задаются интервалы дат по которым будет группироваться задолженность. А 50000 это предусмотрено программистами программы УТ как максимальное количество дней в интервале, что равняется ~137 годам. Думаю больше вряд ли Вам понадобится 😉 Мне кажется Вам нужно побольше изучить программу.

    Reply ↓
  28. artspeed

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

    Я бы так сделал.

    Reply ↓
  29. McLer

    (28) artspeed, нет вы не поняли, я говорил про ограничение в 50000. А реквизит нужен для формирования интервалов по задолженности.

    Reply ↓
  30. artspeed

    теперь понял. спасибо.

    Reply ↓
  31. OscarTT

    Подскажите, учитывает ли Ваш отчет кредиторскую задолженность перед контрагентом, или только дебиторскую?

    Reply ↓
  32. McLer

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

    Reply ↓
  33. extremhelp

    Нет дебиторской задолженности 8.1 УТ

    Reply ↓
  34. extremhelp

    Как настроить кредиторскую задолженность УТ 10.3 на 8.1

    Reply ↓
  35. extremhelp

    Как настроить ?

    Reply ↓
  36. extremhelp

    Помогите настроить дебиторскую задолженность

    Reply ↓
  37. McLer

    (37) extremhelp, что у вас конкретно не получается? Настроить отчет? в договорах стоит признак «вести по документам расчетов» ? смотрели мою публикацию про заполнение документов?

    Reply ↓
  38. McLer

    (34) extremhelp, радовались бы что ее нет ;))

    Reply ↓
  39. dimaadidas

    Очень полезная и нужная обработка) Спасибо

    Reply ↓
  40. Harry_Joplin

    Хороший отчет. Но по мне так сильно не хватает вывода Период + Регистратор, общая сумма задолженности видна, а как сформировалась не понятно?

    Reply ↓
  41. McLer

    (41) Harry_Joplin, да так оно и есть, потому что отчет показывает именно остатки взаиморасчетов. А для того чтобы увидеть движения надо использовать отчет «Ведомость по взаиморасчетам с контрагентами» там и регистратор и период, но нет просрочки и долгов по периодам. Да конечно было бы классно попробовать их объединить, но не знаю на сколько это возможно и целесообразно. Посмотрите, возможно есть похожие (может быть платные), отчеты показывающие обороты вместе с просрочкой.

    Reply ↓
  42. lees

    скачал и доработал под себя, спасибо

    Reply ↓
  43. McLer

    (43) lees, пожалуйста.

    Reply ↓
  44. kwl

    Данный отчет очень помог, спасибо!!!

    Reply ↓

Leave a Comment

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