位置: 编程技术 - 正文

NGUI的UIScrollview的优化

编辑:rootadmin

推荐整理分享NGUI的UIScrollview的优化,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

转载自: 发现如果数据量大了。NGUI就会创建大量的GameObject. 这样肯定对性能消耗影响巨大,所以我自己优化了一下。这样效率可以提高很多。当然,优化过后UIGrid还是有一些不足,可惜暂时没有思路,以后有思路了。再接着继续。直接贴代码。

Demo : game.gamerisker.com/grid/

DownLoad : GridDemo 访问密码: o7bf

NGUI的UIScrollview的优化

CustomGrid.csC#using UnityEngine;using System.Collections;using System.Collections.Generic; /// <summary>/// @author : YangDan/// @date : -6-/// /// CustomGrid,这个类主要做了一件事,就是优化了,NGUI UIGrid 在数据量很多都时候,///创建过多都GameObject对象,造成资源浪费./// 该类需要和 CustomScrollView.cs 以及 CustomDragScrollView.cs一起使用;/// CustomScrollView 类只上把bounds字段给暴露出来,因为bounds都大小需要在外面设置了./// CustomDragScrollView 类 没有修改,///因为默认都UIDragScrollView 默认里面调用都上UIScrollView ///不能与我们都CustomScrollView兼容./// 所以只是将里面都UIScrollView 改为 CustomScrollView./// Item 是一个渲染操作类.可以自己定义,或者不要,并没有影响./// </summary>/// public class CustomGrid : UIWidgetContainer{ public GameObject Item; public int m_cellHeight = ; public int m_cellWidth = ; private float m_height; private int m_maxLine; private Item[] m_cellList; private CustomScrollView mDrag; private float lastY = -1; private List<string> m_listData; private Vector3 defaultVec; void Awake() { m_listData = new List<string>(); defaultVec = new Vector3(0, m_cellHeight, 0); mDrag = NGUITools.FindInParents<CustomScrollView>(gameObject); m_height = mDrag.panel.height; m_maxLine = Mathf.CeilToInt(m_height / m_cellHeight) + 1; m_cellList = new Item[m_maxLine]; CreateItem(); } void Update() { if (mDrag.transform.localPosition.y != lastY) { Validate(); lastY = mDrag.transform.localPosition.y; } } private void UpdateBounds(int count) { Vector3 vMin = new Vector3(); vMin.x = -transform.localPosition.x; vMin.y = transform.localPosition.y - count * m_cellHeight; vMin.z = transform.localPosition.z; Bounds b = new Bounds(vMin, Vector3.one); b.Encapsulate(transform.localPosition); mDrag.bounds = b; mDrag.UpdateScrollbars(true); mDrag.RestrictWithinBounds(true); } public void AddItem(string name) { m_listData.Add(name); Validate(); UpdateBounds(m_listData.Count); } private void Validate() { Vector3 position = mDrag.panel.transform.localPosition; float _ver = Mathf.Max(position.y, 0); int startIndex = Mathf.FloorToInt(_ver / m_cellHeight); int endIndex = Mathf.Min(m_listData.Count, startIndex + m_maxLine); Item cell; int index = 0; for (int i = startIndex; i < startIndex + m_maxLine; i++) { cell = m_cellList[index]; if (i < endIndex) { cell.text = m_listData[i]; cell.transform.localPosition = new Vector3(0, i * -m_cellHeight, 0); cell.gameObject.SetActive(true); } else { cell.transform.localPosition = defaultVec; } index++; } } private void CreateItem() { for (int i = 0; i < m_maxLine; i++) { GameObject go; go = Instantiate(Item) as GameObject; go.transform.parent = transform; go.transform.localScale = Vector3.one; go.SetActive(false); go.name = "Item" + i; Item item = go.GetComponent<Item>(); item.Init(); m_cellList[i] = item; } }}

Main.csC#usingUnityEngine;usingSystem.Collections; /// <summary>/// 主初始化类/// </summary>publicclassMain:MonoBehaviour{ publicintcount; publicboolisUpdate=true; privateCustomGridgrid; privateintindex=0; privateinti=0; privateUILabellabel; voidAwake() { grid=GetComponentInChildren<CustomGrid>(); label=transform.FindChild("back/back/Label").GetComponent<UILabel>(); } voidStart() { while(i<count) { Add(""&#;i&#;&#;); } label.text=string.Format("创建 {0} 个Item",i.ToString());} voidUpdate() { if(isUpdate) { if(index%==0) { Add(i.ToString()); i&#;&#;; label.text=string.Format("创建 {0} 个Item",i.ToString()); } index&#;&#;; } } privatevoidAdd(stringtext) { grid.AddItem(text); }}

Item.csC#using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Text.RegularExpressions; /// <summary>/// 子渲染处理类/// </summary>public class Item : MonoBehaviour { private UILabel label; public void Init() { label = transform.FindChild("Label").GetComponent<UILabel>(); } /// <summary> /// 文本内容 /// </summary> public string text { set { label.text = value; } }}

CustomScrollView.csusingUnityEngine; /// <summary>/// 自定义ScrollView 和 UIScrollView 基本相同/// </summary>publicclassCustomScrollView:MonoBehaviour{publicenumMovement{Horizontal,Vertical,Unrestricted,Custom,} publicenumDragEffect{None,Momentum,MomentumAndSpring,} publicenumShowCondition{Always,OnlyIfNeeded,WhenDragging,} publicdelegatevoidOnDragFinished(); publicMovementmovement=Movement.Vertical; publicDragEffectdragEffect=DragEffect.MomentumAndSpring; publicboolrestrictWithinPanel=true; publicbooldisableDragIfFits=false; publicboolsmoothDragStart=true; publicbooliOSDragEmulation=true; publicfloatscrollWheelFactor=0.f; publicfloatmomentumAmount=f;publicUIScrollBarhorizontalScrollBar; publicUIScrollBarverticalScrollBar; publicShowConditionshowScrollBars=ShowCondition.OnlyIfNeeded; publicVector2customMovement=newVector2(1f,0f); publicVector2relativePositionOnReset=Vector2.zero; publicOnDragFinishedonDragFinished; [HideInInspector][SerializeField]Vector3scale=newVector3(0f,0f,0f); TransformmTrans;UIPanelmPanel;PlanemPlane;Vector3mLastPos;boolmPressed=false;Vector3mMomentum=Vector3.zero;floatmScroll=0f;BoundsmBounds; //bool mCalculatedBounds = false;boolmShouldMove=false;boolmIgnoreCallbacks=false;intmDragID=-;Vector2mDragStartOffset=Vector2.zero;boolmDragStarted=false; publicUIPanelpanel{get{returnmPanel;}} publicBoundsbounds{get{ returnmBounds;} set { mBounds=value; }} publicboolcanMoveHorizontally{get{returnmovement==Movement.Horizontal||movement==Movement.Unrestricted||(movement==Movement.Custom&&customMovement.x!=0f);}} publicboolcanMoveVertically{get{returnmovement==Movement.Vertical||movement==Movement.Unrestricted||(movement==Movement.Custom&&customMovement.y!=0f);}} publicvirtualboolshouldMoveHorizontally{get{floatsize=bounds.size.x;if(mPanel.clipping==UIDrawCall.Clipping.SoftClip)size&#;=mPanel.clipSoftness.x *2f;returnsize>mPanel.width;}} publicvirtualboolshouldMoveVertically{get{floatsize=bounds.size.y;if(mPanel.clipping==UIDrawCall.Clipping.SoftClip)size&#;=mPanel.clipSoftness.y *2f;returnsize>mPanel.height;}} protectedvirtualboolshouldMove{get{if(!disableDragIfFits)returntrue; if(mPanel==null)mPanel=GetComponent<UIPanel>();Vector4clip=mPanel.finalClipRegion;Boundsb=bounds; floathx=(clip.z==0f)?Screen.width :clip.z *0.5f;floathy=(clip.w==0f)?Screen.height:clip.w *0.5f; if(canMoveHorizontally){if(b.min.x<clip.x-hx)returntrue;if(b.max.x>clip.x&#;hx)returntrue;} if(canMoveVertically){if(b.min.y<clip.y-hy)returntrue;if(b.max.y>clip.y&#;hy)returntrue;}returnfalse;}} publicVector3currentMomentum{get{returnmMomentum;}set{mMomentum=value;mShouldMove=true;}} voidAwake(){mTrans=transform;mPanel=GetComponent<UIPanel>(); if(mPanel.clipping==UIDrawCall.Clipping.None)mPanel.clipping=UIDrawCall.Clipping.ConstrainButDontClip;if(movement!=Movement.Custom&&scale.sqrMagnitude>0.f){if(scale.x==1f&&scale.y==0f){movement=Movement.Horizontal;}elseif(scale.x==0f&&scale.y==1f){movement=Movement.Vertical;}elseif(scale.x==1f&&scale.y==1f){movement=Movement.Unrestricted;}else{movement=Movement.Custom;customMovement.x=scale.x;customMovement.y=scale.y;}scale=Vector3.zero;#if UNITY_EDITORUnityEditor.EditorUtility.SetDirty(this);#endif}if(Application.isPlaying)mPanel.onChange&#;=OnPanelChange;} voidOnDestroy(){if(Application.isPlaying&&mPanel!=null)mPanel.onChange-=OnPanelChange;} voidOnPanelChange(){UpdateScrollbars(true);} voidStart(){if(Application.isPlaying){UpdateScrollbars(true); if(horizontalScrollBar!=null){EventDelegate.Add(horizontalScrollBar.onChange,OnHorizontalBar);horizontalScrollBar.alpha=((showScrollBars==ShowCondition.Always)||shouldMoveHorizontally)?1f:0f;} if(verticalScrollBar!=null){EventDelegate.Add(verticalScrollBar.onChange,OnVerticalBar);verticalScrollBar.alpha=((showScrollBars==ShowCondition.Always)||shouldMoveVertically)?1f:0f;}}} publicboolRestrictWithinBounds(boolinstant){returnRestrictWithinBounds(instant,true,true);} publicboolRestrictWithinBounds(boolinstant,boolhorizontal,boolvertical){Boundsb=bounds;Vector3constraint=mPanel.CalculateConstrainOffset(b.min,b.max); if(!horizontal)constraint.x=0f;if(!vertical)constraint.y=0f; if(constraint.magnitude>1f){if(!instant&&dragEffect==DragEffect.MomentumAndSpring){Vector3pos=mTrans.localPosition&#;constraint;pos.x=Mathf.Round(pos.x);pos.y=Mathf.Round(pos.y);SpringPanel.Begin(mPanel.gameObject,pos,f);}else{MoveRelative(constraint);mMomentum=Vector3.zero;mScroll=0f;}returntrue;}returnfalse;} publicvoidDisableSpring(){SpringPanelsp=GetComponent<SpringPanel>();if(sp!=null)sp.enabled=false;} publicvirtualvoidUpdateScrollbars(boolrecalculateBounds){if(mPanel==null)return; if(horizontalScrollBar!=null||verticalScrollBar!=null){if(recalculateBounds){ //mCalculatedBounds = false;mShouldMove=shouldMove;} Boundsb=bounds;Vector2bmin=b.min;Vector2bmax=b.max; if(horizontalScrollBar!=null&&bmax.x>bmin.x){Vector4clip=mPanel.finalClipRegion;floatextents=clip.z *0.5f; if(mPanel.clipping==UIDrawCall.Clipping.SoftClip)extents-=mPanel.clipSoftness.x; floatmin=clip.x-extents-b.min.x;floatmax=b.max.x-extents-clip.x; floatwidth=bmax.x-bmin.x;min=Mathf.Clamp(min/width);max=Mathf.Clamp(max/width); floatsum=min&#;max;mIgnoreCallbacks=true;horizontalScrollBar.barSize=1f-sum;horizontalScrollBar.value=(sum>0.f)?min/sum:0f;mIgnoreCallbacks=false;} if(verticalScrollBar!=null&&bmax.y>bmin.y){Vector4clip=mPanel.finalClipRegion;floatextents=clip.w *0.5f; if(mPanel.clipping==UIDrawCall.Clipping.SoftClip)extents-=mPanel.clipSoftness.y; floatmin=clip.y-extents-bmin.y;floatmax=bmax.y-extents-clip.y; floatheight=bmax.y-bmin.y;min=Mathf.Clamp(min/height);max=Mathf.Clamp(max/height);floatsum=min&#;max; mIgnoreCallbacks=true;verticalScrollBar.barSize=1f-sum;verticalScrollBar.value=(sum>0.f)?1f-min/sum:0f;mIgnoreCallbacks=false;}}elseif(recalculateBounds){ //mCalculatedBounds = false;}} publicvirtualvoidSetDragAmount(floatx,floaty,boolupdateScrollbars){DisableSpring(); Boundsb=bounds;if(b.min.x==b.max.x||b.min.y==b.max.y)return; Vector4clip=mPanel.finalClipRegion;clip.x=Mathf.Round(clip.x);clip.y=Mathf.Round(clip.y);clip.z=Mathf.Round(clip.z);clip.w=Mathf.Round(clip.w); floathx=clip.z *0.5f;floathy=clip.w *0.5f;floatleft=b.min.x&#;hx;floatright=b.max.x-hx;floatbottom=b.min.y&#;hy;floattop=b.max.y-hy; if(mPanel.clipping==UIDrawCall.Clipping.SoftClip){left-=mPanel.clipSoftness.x;right&#;=mPanel.clipSoftness.x;bottom-=mPanel.clipSoftness.y;top&#;=mPanel.clipSoftness.y;} floatox=Mathf.Lerp(left,right,x);floatoy=Mathf.Lerp(top,bottom,y); ox=Mathf.Round(ox);oy=Mathf.Round(oy); if(!updateScrollbars){Vector3pos=mTrans.localPosition;if(canMoveHorizontally)pos.x&#;=clip.x-ox;if(canMoveVertically)pos.y&#;=clip.y-oy;mTrans.localPosition=pos;} if(canMoveHorizontally)clip.x=ox;if(canMoveVertically)clip.y=oy; Vector4cr=mPanel.baseClipRegion;mPanel.clipOffset=newVector2(clip.x-cr.x,clip.y-cr.y); if(updateScrollbars)UpdateScrollbars(false);} publicvoidResetPosition(){if(NGUITools.GetActive(this)){ //mCalculatedBounds = false;SetDragAmount(relativePositionOnReset.x,relativePositionOnReset.y,false);SetDragAmount(relativePositionOnReset.x,relativePositionOnReset.y,true);}} voidOnHorizontalBar(){if(!mIgnoreCallbacks){floatx=(horizontalScrollBar!=null)?horizontalScrollBar.value:0f;floaty=(verticalScrollBar!=null)?verticalScrollBar.value:0f;SetDragAmount(x,y,false);}} voidOnVerticalBar(){if(!mIgnoreCallbacks){floatx=(horizontalScrollBar!=null)?horizontalScrollBar.value:0f;floaty=(verticalScrollBar!=null)?verticalScrollBar.value:0f;SetDragAmount(x,y,false);}} publicvirtualvoidMoveRelative(Vector3relative){mTrans.localPosition&#;=relative;Vector2co=mPanel.clipOffset;co.x-=relative.x;co.y-=relative.y;mPanel.clipOffset=co;UpdateScrollbars(false);} publicvoidMoveAbsolute(Vector3absolute){Vector3a=mTrans.InverseTransformPoint(absolute);Vector3b=mTrans.InverseTransformPoint(Vector3.zero);MoveRelative(a-b);} publicvoidPress(boolpressed){if(smoothDragStart&&pressed){mDragStarted=false;mDragStartOffset=Vector2.zero;} if(enabled&&NGUITools.GetActive(gameObject)){if(!pressed&&mDragID==UICamera.currentTouchID)mDragID=-; //mCalculatedBounds = false;mShouldMove=shouldMove;if(!mShouldMove)return;mPressed=pressed; if(pressed){// Remove all momentum on pressmMomentum=Vector3.zero;mScroll=0f; // Disable the spring movementDisableSpring(); // Remember the hit positionmLastPos=UICamera.lastHit.point; // Create the plane to drag alongmPlane=newPlane(mTrans.rotation *Vector3.back,mLastPos); // Ensure that we're working with whole numbers, keeping everything pixel-perfectVector2co=mPanel.clipOffset;co.x=Mathf.Round(co.x);co.y=Mathf.Round(co.y);mPanel.clipOffset=co; Vector3v=mTrans.localPosition;v.x=Mathf.Round(v.x);v.y=Mathf.Round(v.y);mTrans.localPosition=v;}else{if(restrictWithinPanel&&mPanel.clipping!=UIDrawCall.Clipping.None&&dragEffect==DragEffect.MomentumAndSpring)RestrictWithinBounds(false,canMoveHorizontally,canMoveVertically); if(!smoothDragStart||mDragStarted){if(onDragFinished!=null)onDragFinished();}}}} publicvoidDrag(){if(enabled&&NGUITools.GetActive(gameObject)&&mShouldMove){if(mDragID==-)mDragID=UICamera.currentTouchID;UICamera.currentTouch.clickNotification=UICamera.ClickNotification.BasedOnDelta; // Prevents the drag "jump". Contributed by 'mixd' from the Tasharen forums.if(smoothDragStart&&!mDragStarted){mDragStarted=true;mDragStartOffset=UICamera.currentTouch.totalDelta;} Rayray=smoothDragStart?UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos-mDragStartOffset):UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos); floatdist=0f; if(mPlane.Raycast(ray,outdist)){Vector3currentPos=ray.GetPoint(dist);Vector3offset=currentPos-mLastPos;mLastPos=currentPos; if(offset.x!=0f||offset.y!=0f){offset=mTrans.InverseTransformDirection(offset); if(movement==Movement.Horizontal){offset.y=0f;offset.z=0f;}elseif(movement==Movement.Vertical){offset.x=0f;offset.z=0f;}elseif(movement==Movement.Unrestricted){offset.z=0f;}else{offset.Scale((Vector3)customMovement);}offset=mTrans.TransformDirection(offset);} // Adjust the momentummMomentum=Vector3.Lerp(mMomentum,mMomentum&#;offset *(0.f*momentumAmount),0.f); // Move the scroll viewif(!iOSDragEmulation){MoveAbsolute(offset);}else{Vector3constraint=mPanel.CalculateConstrainOffset(bounds.min,bounds.max); if(constraint.magnitude>1f){MoveAbsolute(offset *0.5f);mMomentum *=0.5f;}else{MoveAbsolute(offset);}} // We want to constrain the UI to be within boundsif(restrictWithinPanel&&mPanel.clipping!=UIDrawCall.Clipping.None&&dragEffect!=DragEffect.MomentumAndSpring){RestrictWithinBounds(true,canMoveHorizontally,canMoveVertically);}}}} publicvoidScroll(floatdelta){if(enabled&&NGUITools.GetActive(gameObject)&&scrollWheelFactor!=0f){DisableSpring();mShouldMove=shouldMove;if(Mathf.Sign(mScroll)!=Mathf.Sign(delta))mScroll=0f;mScroll&#;=delta *scrollWheelFactor;}} voidLateUpdate(){if(!Application.isPlaying)return;floatdelta=RealTime.deltaTime; // Fade the scroll bars if neededif(showScrollBars!=ShowCondition.Always){boolvertical=false;boolhorizontal=false; if(showScrollBars!=ShowCondition.WhenDragging||mDragID!=-||mMomentum.magnitude>0.f){vertical=shouldMoveVertically;horizontal=shouldMoveHorizontally;} if(verticalScrollBar){floatalpha=verticalScrollBar.alpha;alpha&#;=vertical?delta *6f:-delta *3f;alpha=Mathf.Clamp(alpha);if(verticalScrollBar.alpha!=alpha)verticalScrollBar.alpha=alpha;} if(horizontalScrollBar){floatalpha=horizontalScrollBar.alpha;alpha&#;=horizontal?delta *6f:-delta *3f;alpha=Mathf.Clamp(alpha);if(horizontalScrollBar.alpha!=alpha)horizontalScrollBar.alpha=alpha;}} // Apply momentumif(mShouldMove&&!mPressed){if(movement==Movement.Horizontal||movement==Movement.Unrestricted){mMomentum-=mTrans.TransformDirection(newVector3(mScroll *0.f,0f,0f));}elseif(movement==Movement.Vertical){mMomentum-=mTrans.TransformDirection(newVector3(0f,mScroll *0.f,0f));}else{mMomentum-=mTrans.TransformDirection(newVector3(mScroll *customMovement.x *0.f,mScroll *customMovement.y *0.f,0f));} if(mMomentum.magnitude>0.f){mScroll=NGUIMath.SpringLerp(mScroll,0f,f,delta); // Move the scroll viewVector3offset=NGUIMath.SpringDampen(refmMomentum,9f,delta);MoveAbsolute(offset); // Restrict the contents to be within the scroll view's boundsif(restrictWithinPanel&&mPanel.clipping!=UIDrawCall.Clipping.None)RestrictWithinBounds(false,canMoveHorizontally,canMoveVertically);if(mMomentum.magnitude<0.f&&onDragFinished!=null)onDragFinished();return;}else{mScroll=0f;mMomentum=Vector3.zero;}}elsemScroll=0f; // Dampen the momentumNGUIMath.SpringDampen(refmMomentum,9f,delta);} #if UNITY_EDITOR /// <summary> /// Draw a visible orange outline of the bounds. /// </summary> voidOnDrawGizmos() { if(mPanel!=null) { Boundsb=bounds; Gizmos.matrix=transform.localToWorldMatrix; Gizmos.color=newColor(1f,0.4f,0f); Gizmos.DrawWireCube(newVector3(b.center.x,b.center.y,b.min.z),newVector3(b.size.x,b.size.y,0f)); } }#endif}

CustomDragScrollView.csC#usingUnityEngine;usingSystem.Collections; /// <summary>/// 子类拖到处理类/// </summary>publicclassCustomDragScrollView:MonoBehaviour{ publicCustomScrollViewscrollView; [HideInInspector] [SerializeField] CustomScrollViewdraggablePanel; TransformmTrans; CustomScrollViewmScroll;boolmAutoFind=false; voidOnEnable(){mTrans=transform; if(scrollView==null&&draggablePanel!=null){scrollView=draggablePanel;draggablePanel=null;}FindScrollView();} voidFindScrollView(){ CustomScrollViewsv=NGUITools.FindInParents<CustomScrollView>(mTrans); if(scrollView==null){scrollView=sv;mAutoFind=true;}elseif(scrollView==sv){mAutoFind=true;}mScroll=scrollView;} voidStart(){FindScrollView();} voidOnPress(boolpressed){if(mAutoFind&&mScroll!=scrollView){mScroll=scrollView;mAutoFind=false;} if(scrollView&&enabled&&NGUITools.GetActive(gameObject)){scrollView.Press(pressed);if(!pressed&&mAutoFind){ scrollView=NGUITools.FindInParents<CustomScrollView>(mTrans);mScroll=scrollView;}}} voidOnDrag(Vector2delta){if(scrollView&&NGUITools.GetActive(this))scrollView.Drag();} voidOnScroll(floatdelta){if(scrollView&&NGUITools.GetActive(this))scrollView.Scroll(delta);}}

[置顶] Unity项目对 git版本控制库扩展插件 孙广东.6.在UNity5.x之前的版本,我们用文本编辑器如sublimetext打开.unity.prefab时是可以看到yaml格式的文本内容,但是在UNity5.x当在察看.unity.prefab文件

【Unity】Finite State Machine 有限状态机 原文链接:

Unity中 Plugin 跨语言 类型转换 Unity支持Plugin,有一些代码我们可以用C来编写成Plugin供C#调用,但是对于不同语言之间的类型转换就会很纠结。比如说C#里面的string到C里面是什么?C里

标签: NGUI的UIScrollview的优化

本文链接地址:https://www.jiuchutong.com/biancheng/369350.html 转载请保留说明!

上一篇:【插件】特效发射粒子数查找工具(特效添加)

下一篇:[置顶] Unity项目对 git版本控制库扩展插件([置顶]bilinovel)

  • 小微企业普惠性税收减免政策2019 13号
  • 证券交易计税依据
  • 银行回单手续费分录
  • 非工作日是否可以开标
  • 房产公司要交房产税吗
  • 事业专款支出形成的固定资产如何入账?
  • 领导报销发票挂哪个科目
  • 周转材料摊销属于什么费用
  • 以非现金资产清偿债务的会计处理
  • 施工分包分为哪些
  • 有限公司结业清算
  • 职工福利费在期间费用表中怎么填
  • 小规模怎样计算进项税额
  • 职工教育经费的扣除标准是什么
  • 化妆品消费税是从价还是从量
  • 所得税汇算清缴扣除标准
  • 金税盘使用说明
  • 何时进行文化事业建设
  • 非居民企业啥意思
  • 盘盈对应的入账科目
  • 公司贷款评估费的做账
  • 发票上月开本月到账要交企业所得税吗?
  • 未确认收货可以评价吗
  • 普通增值税发票跨越可以作废吗
  • 一般纳税人出租不动产
  • 以前年度的其他应付款不用付怎么处理
  • 长期待摊费用摊销会计分录
  • 增值税即征即退2023政策
  • 装电脑系统的方法和步骤
  • 再次研究下cache_lite
  • 系统太多怎么办
  • 实收资本可以大于注册资本嘛
  • 艾叶泡脚的方法和注意事项
  • 专项维修基金会产生利息吗
  • PHP:Memcached::setMulti()的用法_Memcached类
  • 怎样做好固定资产管理工作
  • 新手刚接触财务
  • 购买专利权的会议纪要
  • 将款项汇往外地采购专用账户会计分录
  • Laravel5.* 打印出执行的sql语句的方法
  • 什么是增值税普票和专票
  • php弹出登录框
  • 上海广为
  • php用户登录界面代码
  • 商业折扣的会计分录
  • 材料暂估成本的账务处理
  • 印花税的申报表怎么打印
  • 公司注销单位公积金账户余额怎么处理
  • 增值税发票抵扣联的作用
  • sql server 2012安装无网络可以OK?
  • SQL Server 2005/2008 导入导出数据常见报错解决方法
  • 购买仓库计入什么科目
  • 中小企业所得税优惠
  • 企业盘亏的原因怎么写
  • 财产转让按什么计征
  • 汇算清缴期间费用社保填哪里
  • 免抵退税和留抵退税计算题
  • 以前年度损益调整是什么意思
  • 汇算清缴退税分录
  • 预付账款是属于什么类
  • 空档期太长是不是很难找工作
  • 公允价值举例说明
  • 分公司人数要求
  • 错误原始凭证怎么写
  • mysql zip archive 版本(5.7.19)安装教程详细介绍
  • sql语句常用语句
  • mysql数据库隐藏指定内容
  • ubuntu16.04开启远程桌面
  • mac wifi时断时续
  • macbookpro鼠标触控板
  • win8 开机
  • jasonToObject
  • nodejs 视频切片
  • jquery mobile
  • 利用python进行爬虫
  • js生成excel文件
  • node.js权威指南
  • 重庆电子税务局网页版登录
  • 山东国税局官网登录
  • 包装种类代码表集装箱
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设