Отчет по дебиторке и кредиторке (ФИФО) по интервалам просрочки для УТ 11, ERP 2




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

51 Comments

  1. anuta_IV

    Всё отлично! Спасибо! Используем на ERP 2.4.5

    Reply ↓
  2. user809261

    Не работает на Управление торговлей, редакция 11 (11.3.3.231) , в демо режиме предыдущая версия работала

    Reply ↓
  3. eeeio

    (2) Приложил версию для УТ 11.3

    Reply ↓
  4. pizhenkov

    Супер! Только не понятно куда добавлять отсрочку?

    Reply ↓
  5. eeeio

    (4) Не понял вопроса.

    Reply ↓
  6. alsan

    (4)реквизит «Дата платежа» документа реализации, он заполняется из графика в соглашении, можно и вручную, типовой функционал

    Reply ↓
  7. Sitnikov

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

    Reply ↓
  8. eeeio

    (7) Флаг «Динамический расчет дат оплат» взведен?

    Reply ↓
  9. Sitnikov

    (8) Да

    Reply ↓
  10. Sitnikov

    (8)

    Reply ↓
  11. eeeio

    (10) Посмотрите в настройках параметр «Разбивать по интервалам» — если он равен «дебиторку», то просрочка будет вычисляться именно по дебиторской задолженности, если «кредиторку» — по кредиторской.

    Reply ↓
  12. alsan

    если в настройка СКД убрать контрагента и организацию, то отчет не свернет оплаты по партнеру, т.е. сворачивание происходит только по аналитике, есть в планах подобные доработки, чтобы оплаты сворачивались по одному из выбранных полей?

    Reply ↓
  13. eeeio

    (12) нет, дорабатывать ничего нового не планирую

    Reply ↓
  14. crimeait

    Добрый день! Есть ли вариант развернуть по срокам, но осаткти собирать не по партнеру, а по конрагенту?

    В чём проблема, есть сеть, Контрагент — для взаиморасчетов, партнер — торговая точка, оплата разнесена не совсем коректно правильный контрагент но не правильный партнер (в палтежках указывается и тот и тот), и взаиморасчеты старые не закрываются, доже если из структуры отчета убрать партнера

    Reply ↓
  15. eeeio

    (14) Напишите в личку — обсудим

    Reply ↓
  16. crimeait

    Доброго времени!

    Возможно ли собирать долги по срокам в разрезе контрагента, а не партнера (контрагент — плательщик, партнер — торговая точка).

    Когда в структуре убрать партнера, долги не списываются по фифо в разрезе контрагента, так как собираются по партнеру

    или подскажите как это исправить???

    Reply ↓
  17. crimeait

    не увидел ответа, сейчас напишу

    Reply ↓
  18. eeeio

    (17) В личке что-то сломалось похоже — не отсылаются сообщения. Напишите на почту eeeio@ya.ru

    Reply ↓
  19. crimeait

    написал

    Reply ↓
  20. Lebowski

    Отчет формируется всегда на начало дня, и отгрузки за текущий день не учитываются, даже если ставить время 23:59:59

    Reply ↓
  21. snogl

    Купил три дня назад, и после обновления на УТ (11.4.6.166) перестала работать…

    Reply ↓
  22. eeeio

    (21) Посмотрел изменения в УТ 11.4.6 — в реализацию и приобретение добавили новую табличную часть «Этапы оплаты» и убрали реквизит «Дата платежа». Изменения не то, чтобы кардинальные, но и не просто «имя реквизита сменилось». Выложил версию отчета для УТ 11.4.6 — она работает, но пока не использует новый механизм уточнения этапов оплат в накладной.

    Reply ↓
  23. eeeio

    (20) Да, спасибо за замечание. Попозже сделаю более прозрачно.

    Reply ↓
  24. anuta_IV

    (22) Протестено на ERP 2.4.6.160. Нет теперь ошибки и всё работает!

    Коллеги, режим взаимрасчетов «Онлайн» в 2.4.6.160 работает с ошибками (в проводках по рег.учёту при возврате от поставщиков, например, суммы с минусом). Будьте осторожны! Я не рекомендую пока включать этот режим.

    Reply ↓
  25. user667312_savenko_

    Скачал обновленную версию для 11.4.6. Она как-то странно работает. Если сформировать отчет — отчет формируется. Но, при повторном формировании — вылетает с ошибкой <временная таблица уже существует «Шаг268435456» >.Пробовал разные варианты: удалял отчет полностью и добавлял заново, менял внутренний идентификатор формы через конфигуратор — чтобы настройки сбросились (думал из-за вариантов), заметил что в новой версии есть форма отчета — удалял ее и указывал стандартную форму из конфы — ошибка не уходит. Просьба исправить.

    Reply ↓
  26. eeeio

    (25) Ошибка подтверждается. Планирую адаптировать отчет и исправить ошибку на праздниках.

    Reply ↓
  27. user667312_savenko_

    (26) Получилось адаптировать?

    Reply ↓
  28. eeeio

    (27) Не успел. Сегодня-завтра обязательно сделаю.

    Reply ↓
  29. eeeio

    (25) Исправил ошибку и замечание из (20), но адаптацию не успел пока сделать.

    Reply ↓
  30. Lebowski

    (29)

    Исправил ошибку и замечание из (20)

    Для 11.3 не исправляли?

    Reply ↓
  31. eeeio

    (30) Нет. Но планирую.

    Reply ↓
  32. Lebowski

    (31) Спасибо, будем ждать.

    Reply ↓
  33. Оля-ля-ля

    Добрый день! До июня 2018 году расчеты по контрагенту были по договору, потом включили соглашения. В отчет с этого момента перестали попадать данные по Приобретению товаров и услуг. Вот отчет: https://yadi.sk/i/B6DQoYzmsp1k8g , а вот универсальный отчет по регистру Расчеты с пост

    авщиками: https://yadi.sk/i/J6Z77lJAnszolw https://yadi.sk/i/6UVUMCBkyNXivg https://yadi.sk/i/oaVxeTHLYebQ3A Аналитика учета по партнерам: https://yadi.sk/i/QqblDH-Urw7aZw и https://yadi.sk/i/KVwRPcprqmMINw

    Reply ↓
  34. Bukaska

    (33)Крепите картинки к посту, внизу есть кнопка. А не по сторонним сервисам!

    Reply ↓
  35. Оля-ля-ля

    (34) Добрый день! До июня 2018 году расчеты по контрагенту были по договору, потом включили соглашения. В отчет с этого момента перестали попадать данные по Приобретению товаров и услуг. Вот отчет: , а вот универсальный отчет по регистру Расчеты с поставщиками: Аналитика учета по партнерам: и . Вот вопрос с картинками, ответ будет, что в таком случае делать?

    Reply ↓
  36. SaRana

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

    Подскажите, еще не готова версия для 11.4.6?

    Reply ↓
  37. eeeio

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

    Reply ↓
  38. AltV

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

    Reply ↓
  39. eeeio

    (39) Добрый. Киньте скрин, пжл

    Reply ↓
  40. z-alexey

    В 11.4.8 перестала запускаться, похоже перенесли процедуры в общих модулях

    {ВнешнийОтчет.ЗадолженностьПоИнтерваламФИФО_УТ_11_4_6_вер_39.Форма.Основная.Форма(83)}: Метод объекта не обнаружен (ТипОтчета)

    ТипОтчетаСтрокой = ВариантыОтчетовКлиентСервер.ТипОтчета(Параметры.Отчет, Истина);

    Reply ↓
  41. eeeio

    (41) Спасибо за сигнал. Занялся исправлением.

    Reply ↓
  42. hawk

    (42) Доброго времени суток, подскажите получилось исправить ошибку которая описана в (25)

    Reply ↓
  43. eeeio

    работающая версия для 11.4.8

    https://yadi.sk/d/hmp84ipx_QY9xw

    Reply ↓
  44. hawk

    (44)Спасибо большое

    Reply ↓
  45. alexu_kirov

    Не работает на версии ERP 2.4.8.84

    Поле не найдено «ДатаПлатежа»

    Reply ↓
  46. Трям

    (46) Переименовали реквизит в конфигурации. Добавили к нему слово «Удалить»

    Reply ↓
  47. eeeio

    (46) Извините за задержку с ответом. Вам нужна более новая версия отчета (тут выше выкладывал)

    Reply ↓
  48. invistik

    Доброе время суток, при запуске обработке выдает ошибку

    «{ВнешнийОтчет.ЗадолженностьПоИнтерваламФИФО_УТ_11_4_8_вер_39.Форма.Основная.Форма(1231)}: Метод объекта не обнаружен (ПараметрыРасчетаПоказателейЯчеек)

    ПараметрыРасчета = ОбщегоНазначенияСлужебныйКлиент.ПараметрыРасчетаПоказателейЯчеек(ОтчетТабличныйДокумент);»

    Управление торговлей, редакция 11 (11.4.9.70)

    Reply ↓
  49. evn-zorin

    Спасибо! Замечательный отчёт, автору низкий поклон.

    Reply ↓
  50. user612900_tochkadimon

    скачали ваш отчет для ут 11 4.5(первый вариант), ошибка с шагом, приведенная выше(в посте 25) вылетает при повторном формировании отчета. напишите что нужно исправить плз)

    Reply ↓
  51. user612900_tochkadimon

    (51)

    спасибо огромное автору, все исправлено оперативно

    Reply ↓

Leave a Comment

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