Округление суммы документа с учетом скидок для конфигурации УТ 11 (версия 11.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='\

31 Comments

  1. Katarina2017

    Здравствуйте, подскажите как скачать обработку?

    Reply
  2. user812706

    Добрый день! Скачала и установила Вашу обработку в 1с КА. Не работает в Чеках ККМ. В комментариях все верно, но конечную сумму не выводит.

    Комментарии:

    Сумма документа без скидок: 6 890

    Сумма автоматических скидок: 482,3

    Сумма ручных скидок: 344,5

    Сумма документа со скидками: 6 063,2

    Округленная сумма: 6 060

    Сумма округления: 3,2.

    Скриншот прилагаю.

    Reply
  3. user812706

    Также в 1С:Комплексная автоматизация 2 (2.2.4.21) (http://v8.1c.ru/ka2/)

    Copyright © ООО «1C-Софт», 2004-2017 обработка не работает и в документе Реализации. Скрин в приложении.

    Reply
  4. Sholl

    На скриншоте не понятно, как настроены скидки и порядок в группах скидок.

    На скриншоте: ручная скидка — 199.50, автоматическая с округлением — 280.50

    Всего скидка 480 — округление до 10 руб.

    Reply
  5. user812706

    (4) На скриншоте настройки.

    В комментариях считает верно, но сумму документа не меняет(

    Reply
  6. Sholl

    (5) Возможно нужно проверить настройки группы Округление. Проверю на последнем релизе УТ11, может изменился формат скидок.

    Reply
  7. Sholl

    (5) Проверил на свежем релизе УТ 11, все округляет без ошибок.

    Возможно в Комплексной автоматизации другие механизмы промежуточных расчетов скидок или у Вас неверно настроены группы скидок.

    Reply
  8. user812706

    (7) У нас все равно ничего не работает.

    С вами можно договориться подключиться и все настроить, либо доработать?

    Как с вами более оперативно выйти на связь?

    Reply
  9. user812706

    Добрый вечер.

    У нас все равно не работает.

    Как с вами более оперативно можно выйти на связь?

    Вы могли бы подключиться и настроить, либо доработать?

    Reply
  10. progr-2008

    (2)А точно для КА 2 обработка должна работать вообще?

    Вроде бы:

    «Обработка предназначена для использования в конфигурации «Управление торговлей» 8 редакций 11.2 и 11.3″.

    Reply
  11. Sholl

    Обработку тестировал только на УТ 11. К комплексной автоматизации не подключал.

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

    Судя по скриншоту, округление срабатывает, но общая сумма автоматической скидки не переносится в документ.

    У меня нет клиентов на комплексной автоматизации, поэтому на ней обработка не проверялась.

    Reply
  12. Sholl

    Скоро выложу версию с дополнительной настройкой — «Отключать автоматические скидки, если введена ручная скидка».

    Reply
  13. user890763

    Добрый день.

    Скачал, установил. Как-то не так работает.

    Вопросы:

    1. Работает ли расширение на УТ 11.4 ?

    2. Как обработка дружит с бонусными баллами — начислением и оплатой? Если я все правильно сделал, то обработка округляет с учетом начисляемых бонусных баллов. Например, Округление настроено до 10. При продаже начисляется 149,5 баллов (сумма чека не уменьшается). Обработка добавляет еще 10,5 руб., на которые уменьшается сумма чека. Итог — никакого округления нет. Так и должно быть?

    Reply
  14. Sholl

    (13) На 11.4 расширение работает.

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

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

    Reply
  15. user890763

    (14) Если с бонусами не работает, тогда беда(((

    Есть возможность это доработать?

    Reply
  16. V1V

    УТ 11.4.2.109 работает. Сэнк ю вери мач! Сэкономил время. Ручная скидка, скидка по карте, все отрабатывает, чек округляет

    Reply
  17. barsw

    Здравствуйте, обновил УТ на 11.4 и скидки перестали считаться.

    Reply
  18. malikov_pro

    КА 2.4, используем только ручные скидки, округление отработало нормально.

    Reply
  19. Brawler

    Добрый день.

    Я правильно понимаю, что данная обработка не сможет работать в режиме:

    — округление проводится в каждой строке независимо

    — если нет ручной скидки или автоматической скидки (ранее рассчитанная автоматическая скидка равна нулю), то не округлять

    Reply
  20. pvb2003

    УТ 11.4 — Очень помогло … огромное спасибо!!!

    Reply
  21. s.matyukin_visma

    УТ 11.4 — помогло

    Reply
  22. s.matyukin_visma

    Спасибо Вам!)

    Reply
  23. asdlsd

    Приветствую. Будет ли округлять просто цены? Например цена задана в USD и ее нужно округлять в документах.

    Reply
  24. Sholl

    (23) Добрый день.

    Нет, округляется рассчитанная сумма (цена * количество — скидка).

    Но итоговую сумму округлит.

    Округление цены — при установке цен или в настройках вида цен.

    Reply
  25. pozitr0n

    Доброй ночи. Написал Вам в личку. Такая же беда.

    В комментариях округляет, а сумму документа нет. В реализации такая же ерунда.

    Reply
  26. motorin

    Доброго времени суток.

    Подскажите:

    * Возможно ли настроить округление суммы в каждой строке, а не только общей суммы документа ?

    * Есть ли возможность настроить точность округления до 0,1 руб (10 копеек) ?

    Reply
  27. Sholl

    (26) Добрый день.

    Точность округления настраивается.

    Отдельно строки не округляются. Округляется общая сумма документа.

    Reply
  28. garageinfo

    Коллеги, добрый день!

    Не могу скачать обработку, но очень нужна, киньте плиз на почту dorax@mail.ru

    Reply
  29. tatoshka0403

    У меня вот так получилось в типовой торговле.

    Reply
  30. Sholl

    (29) Типовой механизм округляет с учетом ручных скидок?

    Reply
  31. tatoshka0403

    (30)да, вот по такой настройке у меня заработало.

    Reply

Leave a Comment

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