[ОТВЕТИТЬ]
12.10.2016 09:31
Starter
 
Добрый день!
Не силен в реверс-инжиниринге, поэтому вопрос - можно ли как-нибудь узнать каким запросом отчет УКМ4 (который в веб морде) получает данные из базы MySQL.
Конкретно речь идет об отчете Отчеты/Заказные отчеты/По юр.лицу.

Что самое интересное - отчет заказывался нами, оплачивали его мы, но все равно - код ТП не дает :(
12.10.2016 09:57
vdm
 
Включить лог запросов в mysql. Остановить УКМ, чтобы лишний мусор в логе не мешался.
12.10.2016 14:51
whitewizard
 
Ну и каг бы в коде страницы он будет
12.10.2016 14:55
Starter
 
Логи включил (укм отключал, чтобы его мусора не было), но запрос там... лучше бы и не включал :)
12 Кб такооого, что понять, что откуда берется - практически невозможно.
12.10.2016 15:11
Starter
 
Цитата:
whitewizard Ну и каг бы в коде страницы он будет
В коде страницы не сумел найти.
12.10.2016 15:53
whitewizard
 
c:\Program Files\Apache Group\Apache2ukm\htdocs\ukm\legacy\
и там в нужном php нет ничего похожего на "select from"?
12.10.2016 16:08
vdm
 
Цитата:
whitewizard там в нужном php нет ничего похожего на "select from"?
В том и дело, что в коде страницы требуемого отчета запросов нет, код запрятан в процедуру внутри php_ukm.dll.

Цитата:
Starter 12 Кб такооого, что понять, что откуда берется - практически невозможно
Кинь чтоль глянуть.
12.10.2016 16:45
Starter
 
Во вложении лог.
И ошибся - 12 Мб а не Кб.
Вложения
Тип файла: 7z mysql.7z (162.0 Кб, 10 просмотров)
12.10.2016 17:53
whitewizard
 
Покажи php этого отчета
12.10.2016 18:27
Starter
 
Ниже код из report_payments2jp.php
SQL код:
<?php
require_once('core.php');
require_once(
'referer.php');
require_once(
'utils.php');

require_once(
'Date.php');

$date_from = new Date;
$date_from->hour 0;
$date_from->minute 0;
$date_from->second 0;
$date_from->partsecond 0;

$date_to = new Date;
$date_to->hour 23;
$date_to->minute 59;
$date_to->second 59;
$date_to->partsecond 99;

$date_from datetime_from_userfriendly(_post_arg('date_from'datetime_to_userfriendly($date_from)));
$date_to datetime_from_userfriendly(_post_arg('date_to'datetime_to_userfriendly($date_to)));

if (isset(
$_POST['calculate']))
{
    
$r ukm_report_payments2jp(
        
$core->m_db->dsn['hostspec']
        , (
$core->m_db->dsn['port'] ? $core->m_db->dsn['port'] : 3306)
        , 
$core->m_db->dsn['database']
        , 
$core->m_db->dsn['username']
        , 
$core->m_db->dsn['password']
        , 
$_SESSION['current_cashline']
        , 
$date_from->format('%Y-%m-%d %H:%M:%S')
        , 
$date_to->format('%Y-%m-%d %H:%M:%S')
        );
        
    if(
is_array($r))
    {
        
$core->assign('report'$r);
    }
    else
    {
        
$tutor->set(TUTOR_STOP$r);
    }
}

$core->assign('date_from'datetime_to_userfriendly($date_from));
$core->assign('date_to'datetime_to_userfriendly($date_to));

$core->assign('cashlines'$core->cashline_list());

$core->display('report_payments2jp.tpl');

?>
12.10.2016 18:44
whitewizard
 
report_payments2jp.tpl
покажи ещё
12.10.2016 18:51
Starter
 
report_payments2jp.tpl
SQL код:
{* smarty *}

{include 
file="general_header.tpl" menu="reports_menu.tpl" include_jquery=1}

<
table width="100%" cellpadding="0" cellspacing="0" border="0">
{include 
file="element/quick_link.tpl" ql_title="Магазины:"|tr ql_href="$SCRIPT_NAME?current_cashline=" ql_entry=$cashlines ql_current=$smarty.session.current_cashline}
</
table>

{include 
file="tr_validator.tpl"}

<
form method="post" onsubmit="return validator(this);">
    <
table class="simple_form">
        <
tr>
            <
td>
                {
tr С:}
                {include 
file="jq_smarty_date_time.tpl" name="date_from" id="date_from" form_validator="smarty_date_time" value=$date_from}
            </
td>
            <
td>
                {
tr По:}
                {include 
file="jq_smarty_date_time.tpl" name="date_to" id="date_to" form_validator="smarty_date_time" value=$date_to}
            </
td>
            <
td>
                <
input type="submit" name="calculate" value="{tr Показать}" />
            </
td>
        </
tr>
    </
table>
</
form>

<
table class="simple_form">
    <
thead class="table_heading_1">
        <
th>&nbsp;</th>
        {foreach 
from=$report.stocks_total item=t}
            <
th colspan="3">{$t.name}</th>
        {/foreach}
        <
th colspan="3">{tr ИТОГО}</th>
    </
thead>
    {foreach 
from=$report.stocks item=s}
        <
tr>
            <
td>{$s.name}&nbsp;({$s.id})&nbsp;{$s.inn}&nbsp;{$s.enterprise_name}</td>
            {foreach 
from=$report.stocks_total key=k item=t}
                <
td align="right">{$s.payments[$k].refund|money}</td>
                <
td align="right"><b>{$s.payments[$k].sale|money}</b></td>
                <
td align="right"><span class="alert">{$s.payments[$k].total|money}</span></td>
            {/foreach}
            <
td align="right">{$s.total_refund|money}</td>
            <
td align="right"><b>{$s.total_sale|money}</b></td>
            <
td align="right"><span class="alert">{$s.total|money}</span></td>
        </
tr>
    {/foreach}
    <
tr>
        <
td>{tr ИТОГО}</td>
        {foreach 
from=$report.stocks_total key=k item=t}
            <
td align="right">{$t.refund|money}</td>
            <
td align="right"><b>{$t.sale|money}</b></td>
            <
td align="right"><span class="alert">{$t.total|money}</span></td>
        {/foreach}
        <
td align="right">{$report.total_refund|money}</td>
        <
td align="right"><b>{$report.total_sale|money}</b></td>
        <
td align="right"><span class="alert">{$report.total|money}</span></td>
    </
tr>
</
table>

{include 
file="general_footer.tpl"
13.10.2016 13:05
vdm
 
Цитата:
Starter Во вложении лог.
Дохлый номер.
Проще свое написать.
Там страшное, по каждой позиции каждого чека вся инфа тянется отдельными запросами.
На большом количестве чеков должно тормозить немеряно.
13.10.2016 13:10
Dim
 
у нас за 1 день формируется достаточно приемлемо... если задавать хотя бы 2 дня, тогда вываливается
13.10.2016 13:56
Starter
 
В общем, решил я в супермаге разбивку по отделам/юрлицам делать. И проще и быстрее.
14.10.2016 21:04
Starter
 
Да уж... В супермаге тоже не так все просто и быстро как думал. Там есть отделы (для каждой позиции чека), но вот разбивка нал/безнал в разрезе чека отсутствует, если конвертер не УКМ2 CSV, есть только общая для чека.
А это критично при частичной оплате. XML конвертер не производит расщепление позиций по средствам платежа.

Пришлось лезть в переписку с С+ от 2011 года за "ТЗ" к этому отчету - и там есть моя фраза: "В случае частичной оплаты разделять сумму нала/безнала по ИП пропорционально суммам выручки по ним." Проверил - именно так и происходит. Отсюда, видимо, и "интересный" механизм отчета, который перебирает все чеки.
Опции темы


Часовой пояс GMT +3, время: 13:21.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.