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




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

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 не будет опубликован. Обязательные поля помечены *