Бухгалтерский отчет (1Cv82) о просроченной дебиторской задолженности для конфигураций Росcии, Украины и Беларуси




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

35 Comments

  1. kupala

    Бухгалтерский отчет о просроченной дебиторской задолженности для конфигураций 1С Предприятие 8.2 России, Украины и Беларуси. Глубина задолженности параметризирована. Выборка данных одним запросом.

    Перейти к публикации

    Reply
  2. linkk35

    Спасибо за отчет, Очень помог мне и бухгалтер;)

    Reply
  3. Stepan_1c

    Спасибо за отчет = )

    Reply
  4. KSM

    отчет очень пригодился 🙂

    Reply
  5. revril

    Спасибо автору за отчет)))очень полезный))

    Reply
  6. AnryMc

    (0) Возможно для увеличения быстродействия стоит максимально параметризировать вируальные таблицы в запросе.

    Например:

    ИЗ

    РегистрБухгалтерии.Хозрасчетный.Остатки(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&РабочаяДата, ДЕНЬ, 1), ДЕНЬ), Счет В ИЕРАРХИИ (&СчетЗадолженности), &СписокСубконто, Организация = &Организация ИЛИ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) = &Организация) КАК ХозрасчетныйОстатки

    Вместо:

    ИЗ

    РегистрБухгалтерии.Хозрасчетный.Остатки(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&РабочаяДата, ДЕНЬ, 1), ДЕНЬ), , , ) КАК ХозрасчетныйОстатки

    ГДЕ

    ХозрасчетныйОстатки.Счет В ИЕРАРХИИ(&СчетЗадолженности)

    И (ХозрасчетныйОстатки.Организация = &Организация

    ИЛИ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) = &Организация)

    Reply
  7. AnryMc

    (0) В 4-м запросе условие объединения:

    ДокументыОтгрузки.МоментВремениОтгрузки <= ХозрасчетныйДвиженияССубконто1.Регистратор.МоментВремени

    Т.е. вы повторяете запрос к регистру бухгалтерии чтобы получить только СуммаНарастающим и снова упорядочить по времени, а всё остальное уже было получено во 2-м запросе???

    Возможно стоит воспользоваться — на вкладке «ресурсы» настройкой «Рассчитать по…» (контрагент, договор)???

    Reply
  8. kit

    Спасибо автору! Отчет пригодится, только чуть придется под наши требования переделать.

    Reply
  9. revril

    отчет хороший

    Reply
  10. DarkSign

    Вопрос: при включенном RLS будет работать?

    Reply
  11. Gonza1978

    Спасибо автору за отчет. Хотя и не использовал его напрямую (бухгалтерии хотелось больше информации и в другом виде), но он мне очень помог при создании своего!

    Reply
  12. alexism

    Автор молодец. Буду пробовать использовать для реальных задач. И скорее всего будет использован как плацдарм для собственных разработок )

    Reply
  13. zayden

    а на БП 2.0 будет работать?

    Reply
  14. Ольга 1981

    а если у каждого клдиенте свой срок оплаты по отгрузке (Один в теч. 30 дней после отгрузки, кто то 20 дней, ) Как настроить отчет

    Reply
  15. musatov1c.ru

    Отчет очень подходит под ситуацию у клиентов. Как раз куча отгрузок и не понятно какую сводить с какой. периодически платят по остаткам. Спасибо большое. Буду опробовать 🙂

    Reply
  16. musatov1c.ru

    Почему-то не учитывает возвраты 🙁

    Reply
  17. applesound

    Отличный отчёт. Нет ли такого-же, но только по кредиторской задолженности?

    Reply
  18. glek

    Наверное, если добавить в договора срок оплаты, получится очень приятная штука. Разумеется, использовать отчет в таком виде — не буду, но алгоритм — использую. Огромное спасибо

    Reply
  19. CaptainMorgan

    Вещь крутая. Алгоритм просто замечательный — сервак грузит почти как расчет себестоимости. Проверил на микроскопической базе. Все работает.

    Единственное сожаление на реальной базе ЭТО не возможно использовать. Бухгалтерия не оценит.

    Всё, что формируется дольше 20 минут повергает их в коматозное состояние.

    Как учебное пособие просто не заменимо.

    Автору — уважуха!

    Reply
  20. MasterTonLab

    Товарищи одинЭснеги!

    Кто работал с отчетом отпишитесь плиз на каких релизах он работает?

    На последней БП 2.0.47.7 правильно формируется?

    И, судя по дате отчета, на БП 3.0 он вообще работать не будет?

    Reply
  21. kupala

    (21) MasterTonLab, для бухгалтерии 3 добавлен вариант отчета с возможностью выбора параметров.

    Reply
  22. kupala

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

    Reply
  23. serge_focus

    Спасибо за Отчет.

    Пробую на УТП для Украины.

    Особенно радует возможность не привязываться к договорам.

    За использование СКД — Однозначно ПЛЮС.

    Reply
  24. kievanton

    ошибка в отчете:

    там где левым соединением к «ДокументамОтгрузки» цепляется «РегистрБухгалтерии.Хозрасчетный» нет связи по договору, а только по контрагенту, в случае, если включен параметр «ОплатаТолькоПоДоговору», то отчет выводит некорректные данные(у меня не сошлась сумма в ОСВ по счету 361 с суммой в отчете, в колонке «Общая задолженность», в разрезе по договорам), я думаю вам нужно добавить через «ВЫБОР» эту связь, если у вас включен параметр «ОплатаТолькоПоДоговору», тогда связываем по договору, иначе только по контрагенту. в своей версии отчета, я вообще этот признак убрал, у меня всегда оплата по договору, и просто добавил связь по договору, теперь суммы сходятся.

    Reply
  25. kievanton

    ошибка в отчете:

    там где левым соединением к «ДокументамОтгрузки» цепляется «РегистрБухгалтерии.Хозрасчетный» нет связи по договору, а только по контрагенту, в случае, если включен параметр «ОплатаТолькоПоДоговору», то отчет выводит некорректные данные(у меня не сошлась сумма в ОСВ по счету 361 с суммой в отчете, в колонке «Общая задолженность», в разрезе по договорам), я думаю вам нужно добавить через «ВЫБОР» эту связь, если у вас включен параметр «ОплатаТолькоПоДоговору», тогда связываем по договору, иначе только по контрагенту. в своей версии отчета, я вообще этот признак убрал, у меня всегда оплата по договору, и просто добавил связь по договору, теперь суммы сходятся.

    ПС конфа УТП

    Reply
  26. nodalt

    А корректировку реализации он учитывает?

    А корректировку долга?

    Reply
  27. AnryMc

    (28) ivsi1, А где в описании сказано, что он открыт?

    Reply
  28. lifekz

    Будет работать для УТП для Казахстана?

    Reply
  29. kupala

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

    Reply
  30. Serg O.

    Полезный отчет,

    но… если есть возможность — хотелось бы более оптимизированный…

    — очень долго формирует отчет… (больше 2х минут!)

    даже на SQL базе при «небольшом» количестве контрагентов (около 10) и документов (не более 100)

    — на «живой» базе завис на неопределенное время…

    сразу показывает: Вывод отчета: 0% но остановить ctrl+Breack нельзя

    — еще… у нас просрочка по каждому контрагенту (договору) — может быть своя

    (не 30 дней для всех, а 7, 14, 30, 45 или 60) это тоже никак не учтено

    придется пока самому покопаться и пооптимизировать…

    — сразу «видно» неоптимальное условие ГДЕ… все условия ГДЕ надо в параметрах виртуальных таблиц делать

    — еще глюк… остатки по 62 счету больше чем «Сумма по документу» из-за связей только по просроченной задолженности

    — не учитываются документы «Ввод начальных остатков» — если у клиента ввели на 62.01 задолженность то она НЕ показывается никак в этом отчете!

    Ставлю «+» что хотя бы не с 0 начинать

    Reply
  31. black-rose

    Добрый день!

    Не пошёл отчётик (( «Не может быть прочитан текущей версией программы»

    У меня:

    1С:Предприятие 8.2.17.157

    Бухгалтерия для Украины 1.2.27.5

    Конфигурация типовая, без изменений.

    Для меня отчет действительно не подходит?

    Reply
  32. lomak

    А почему модуль объекта запаролен? Не понятно, как именно идет отбор документов реализаций по которым сформировался долг т.к. запрос возвращает много документов, а в отчет попадают лишь несколько из них.?

    Reply
  33. kupala

    (34) lomak, в модуле пароль установлен, но там пусто. Отчет предоставляется «как есть», дорабатывать следует самостоятельно или заказать у любого разработчика.

    Reply
  34. next_

    А почему скрина нет на отчет ?

    Reply
  35. 028

    здесь учитывается ввод начальных остатков: Расчеты с покупателями и заказчиками (счета 1210, 3510)?

    Reply

Leave a Comment

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