您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Баланс товарных остатков на складе
// ==UserScript== // @name warehouse_balance // @namespace Virtonomica // @description Баланс товарных остатков на складе // @include https://virtonomic*.*/*/main/unit/view/* // @exclude https://virtonomic*.*/*/main/unit/view/*/* // @version 1.03 // ==/UserScript== var run = function (){ function getType(data) { var type = ''; $('script').each(function () { var cl = $(this).text().match(/\.addClass\(\'bg-page-unit-header-(.+)\'\);/); if (cl != null) type = (cl[1]); }); return type==''?'unknown':type; } //end getType() function sort_col(direction){ var order = (direction == 'asc') ? 1 : - 1; var sortFunc = function(a,b){return (b.val - a.val) * order;}; warehouse.sort(sortFunc); for (var i = warehouse.length - 1; i >= 0; i--) { var row = warehouse[i]; if (row === null) continue; $('#' + row.id).appendTo($('.grid')); } $('.asc').find('img').attr('src','/img/up_'+(direction=='asc'?'wh':'gr')+'_sort.png'); $('.desc').find('img').attr('src','/img/down_'+(direction=='desc'?'wh':'gr')+'_sort.png'); $('tr.odd,tr.even','.grid').each(function(i,item){ var cl = $(this).attr('class'); $(this).attr('class',i%2==0?'even':'odd'); var cl_new = $(this).attr('class'); var event = $(this).attr('onmouseout').replace(cl,cl_new); $(this).attr('onmouseout',event); }); } function NumFormat(N) { N += ''; var parts = N.split('.'); var int = parts[0]; var dec = parts.length > 1 ? '.' + parts[1] : ''; var regexp = /(\d+)(\d{3}(\s|$))/; while (regexp.test(int)) { int = int.replace(regexp, '$1 $2'); } return int + dec; } var win = (typeof (unsafeWindow) != 'undefined' ? unsafeWindow : top.window); $ = win.$; // сперва надо убедиться, что мы на странице склада if (getType($)!='warehouse') return; var warehouse = []; var asc_btn = $('<div class="asc" title="сортировка по возрастанию"><a><img src="/img/up_gr_sort.png" style="cursor: pointer; display: table-row" id="sort_asc_btn"></a></div>').click(function () {sort_col('asc');}); var desc_btn = $('<div class="desc" title="сортировка по убыванию"><a><img src="/img/down_gr_sort.png" style="cursor: pointer; display: table-row" id="sort_desc_btn"></a></div>').click(function () {sort_col('desc');}); var cell = $('.grid th:eq(9)'); var header = cell.html(); cell.empty().append($('<div style="display: table-row">').append(header).append($('<div style="display: table-cell">').append(asc_btn).append(desc_btn))); $('tr.even, tr.odd').each(function (id){ var cells = $('td', this); // всего на складе var total = parseInt($(cells[1]).text().replace(/\s+/g,'')); // отгрузки по контракту var kont = parseInt($(cells[5]).text().replace(/\s+/g,'')); // закуплено var zak = parseInt($(cells[7]).text().replace(/\s+/g,'')); // отгружено var otgr = parseInt($(cells[8]).text().replace(/\s+/g,'')); // доля склада var part = parseFloat($(cells[9]).text().replace(/\s+/g,'')); $(this).attr('id',id); warehouse[warehouse.length] = {id:id,val:part}; if (kont > zak) { var days = Math.floor((total - kont) / (kont - zak)); if (days < 0) days = 0; cells[2].innerHTML = '<table width="100%"><tr><td width="10" style="color:red; font-weight:bold; text-align:right">' + days.toString() + '</td><td width="*" style="text-align:right">' + cells[2].innerHTML + '</td></tr></table>'; } var balans = zak - otgr; if (balans < 0) cells[1].innerHTML = cells[1].innerHTML + '<br/><font color="red">' + NumFormat( - balans) + '</font>'; else cells[1].innerHTML = cells[1].innerHTML + '<br/><font color="green">' + NumFormat(balans) + '</font>'; }); }; var script = document.createElement('script'); script.textContent = '(' + run.toString() + ')();'; document.documentElement.appendChild(script);