Начисление процентов по кредитам и займам для 1С:Бухгалтерии 3.0




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

27 Comments

  1. oleg212

    учитывается в обработке частичное погашение долга или кредита?

    Reply
  2. waithaispa

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

    Reply
  3. algora

    (2) waithaispa,

    Можно выбрать любой счет учета как для процентов к уплате, так и процентов к получению

    Reply
  4. waithaispa

    подскажите еще как добавить нужные счета — у меня 67,3

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

    Reply
  5. algora

    (4) waithaispa,

    Если вы программист сами легко добавите. Если нет, напишите на algora@rambler.ru какие счета нужны — добавлю

    Тип договора не важен

    Reply
  6. waithaispa

    Саму операцию делает и договора в операции за месяц есть, но сумм нет — пусто.

    Я правильно заполнила договор? Ваши доп . реквизиты внизу на фото

    Reply
  7. waithaispa

    все получилось! спасибо за оперативную помощь!!!!

    спасибо вам большое за обработку!!!!!!!!!!!!!!!!

    вы очень облегчили этим бухгалтерский труд!!!!!!!!!

    Reply
  8. algora

    (1) oleg212,

    Да

    Reply
  9. Lerusena

    обработка учитывает изменение ставки рефинансирования?

    Reply
  10. Lerusena

    не дождалась ответа, скачала обработку. ставку рефинансирования не учитывает 🙁

    Reply
  11. Zhanna_ser

    Операцию создает, но внутри пусто. Все дополнительные реквизиты заполнены

    Reply
  12. user761689

    (3) в последней версии БП 3.0.50.12 закрыли возможность добавления реквизитов в договора. Что делать?

    Reply
  13. user752987

    (5)

    Добрый день, мы скачали вашу обработку. Добавьте, пожалуйста, в обработку счета 67.01, 67.03, 66.03, эл.адрес sinelnikova77@mail.ru

    Reply
  14. user752987

    (12) У нас версия БП 3.0.50.12 добавление реквизитов к договору открыто

    Reply
  15. user752987

    (13)

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

    Reply
  16. exuma2

    Бухгалтерия предприятия, редакция 3.0 (3.0.51.21)

    «Дополнительные реквизиты» добавил.

    Обработку зарегистрировал в разделе «Дополнительные отчеты и обработки» появилось в Сервис / Дополнительные обработки, но не запускается.

    Через меню «Файл»->»Открыть» запускается, но выглядит странно.

    По команде выполнить создает пустую проводку в «Операции, введенные вручную, впрочем, у Вас на скинах тоже видны две пустых операции.

    Разумеется, ни каких расчетов не производит.

    .

    Reply
  17. slavok123

    Саму операцию делает и договора в операции за месяц есть, но сумм нет — пусто.

    доп реквизиты добавил и заполнил их

    где то еще сумму займа надо указать? где?

    Reply
  18. algora

    Здравствуйте. Сумма определяется как сальдо по счетам кредитов/займов

    Reply
  19. slavok123

    если зарегить обработку, то она не запускается. только через файл открыть

    Reply
  20. slavok123

    (19) исправил, в конфигураторе, в свойстве элемента формы, выставить свойство режим открытия окна = НЕЗАВИСИМЫЙ

    Reply
  21. algora

    (20) спасибо!

    Reply
  22. exuma2

    (21) Только что повторно скачал обработку, по прежнему не запускается. только через файл открыть

    Reply
  23. slavok123

    (22)в конфигураторе, в свойстве элемента формы, выставить свойство режим открытия окна = НЕЗАВИСИМЫЙ

    Reply
  24. exuma2

    (23)

    в конфигураторе, в свойстве элемента формы, выставить свойство режим открытия окна = НЕЗАВИСИМЫЙ

    вставил строку:

    РежимОткрытияОкна = РежимОткрытияОкнаФормы.Независимый;

    Всё заработало, спасибо.

    Reply
  25. sip

    Добрый день! Можно ли и нужно ли (оправдано с точки зрения автора) написать обработку для расчета процентов по договорам займа, чтобы в базе 1С БП 3.0 появились документы Оказание услуг и Поступление услуг.

    ОСН, раздельный учет НДС. Нужно для документа распределение косвенных и для Декларации по НДС для заполнения листа 7. Спасибо!

    Reply
  26. algora

    (25) Добрый день, не сталкивался с таким требованием.

    Reply
  27. user1204144

    (25) Добрый день! Очень нужно.

    Reply

Leave a Comment

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