置顶随笔

[置顶]执子之手--与子偕老

 

谁,吻我之眸,遮我半世流离;

谁,抚我之面,慰我半世哀伤;

谁,携我之心,融我半世冰霜;

谁,扶我之肩,驱我一世沉寂。

谁,唤我之心,掩我一生凌轹。

谁,弃我而去,留我一世独殇;

谁,可明我意,使我此生无憾;

谁,可助我臂,纵横万载无双;

谁,可倾我心,寸土恰似虚弥; 

谁,可葬吾怆,笑天地虚妄,吾心狂。

伊,覆我之唇,祛我前世流离; 

伊,揽我之怀,除我前世轻浮。

  

执子之手,陪你痴狂千生;

深吻子眸,伴你万世轮回。

执子之手,共你一世风霜;

吻子之眸,赠你一世深情。

我, 牵尔玉手, 收你此生所有;

我, 抚尔秀颈, 挡你此生风雨。 

予,挽子青丝,挽子一世情思;

予,执子之手,共赴一世情长;

曾,以父之名,免你一生哀愁;

曾,怜子之情,祝你一生平安!

 

posted @ 2011-08-25 17:38 青蛙學堂 阅读(301) | 评论 (1)编辑 收藏

2020年5月25日

Excel VBA 连接数据库操作excel

Excel VBA 连接数据库操作excel
1.连接数据库,查询数据
Private Sub CommandButton1_Click()
'
'Dim conn As ADODB.Connection
'Set conn = New ADODB.Connection
'
'    Dim rs As ADODB.Recordset
'
'    Set rs = New ADODB.Recordset
 
'conn.ConnectionString = "Provider=SQLOLEDB;Server=192.168.*.*;Database=testdb;Uid=sa;Pwd=*****"
'conn.Open
'MsgBox ("连接成功!" & vbCrLf & "数据库状态:" & conn.State & vbCrLf & "数据库版本:" & conn.Version)
' MsgBox ("连接成功!" & conn.State)
'  rs.Open "select id,name from table ", conn
'
'指定页面单元格赋值
' Sheet3.Range("A1:B1").Value = Array("id77777", "caption88888")
'
'设置表头
'    Range("A1:B1").Value = Array("id", "name")
''将数据输出到工作表
'    Range("A2").CopyFromRecordset rs
''关闭连接
'    rs.Close: Set rs = Nothing
'    conn.Close: Set conn = Nothing
End Sub
2.单元格取值赋值
Private Sub CommandButton2_Click()
'指定页面单元格取值
'   MsgBox Sheet3.Range("A3").Value
'指定页面单元格赋值
' Sheet3.Range("A1:B1").Value = 43434343
End Sub
******************************************************
3.单元格选中单击事件,获取指定行指定列
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'MsgBox "777888999"
获取指定行指定列
'If Target.Column = 3 And Target.Row = 5 Then
'If Target.Column = 3 Then
'  MsgBox "你选中了:" & Target.Text & "行:" & Target.Row
 ' End If
'End Sub
***************************************************8
' Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'  If Target.Column = 1 And Target.Row = 1 Then
'  MsgBox "你选中了:" & Target.Text
'  End If
 ' If Target.Column = 3 And Target.Row = 5 Then
'  MsgBox "你选中了:" & Target.Text
 ' End If
 ' End Sub

posted @ 2020-05-25 09:42 青蛙學堂 阅读(4) | 评论 (0)编辑 收藏

2020年5月21日

将select 查询结果拼接成字串

将select 查询结果拼接成字串
select (select id+'',name+',' from table1 for xml path(''))

posted @ 2020-05-21 14:57 青蛙學堂 阅读(4) | 评论 (0)编辑 收藏

2020年5月19日

update table select 值

QL update select语句

最常用的update语法是:

1 2 
UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 = VALUE

如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦

第一,要select出来放在临时变量上,有很多个很难保存。 第二,再将变量进行赋值。

列多起来非常麻烦,能不能像Insert那样,把整个Select语句的结果进行插入呢? 就好象下面::

1 2 3 
INSERT INTO table1 (c1, c2, c3) (SELECT v1, v2, v3 FROM table2)

答案是可以的,具体的语法如下:

1 2 3 4 5 6 
UPDATE table1 alias SET (column_name,column_name ) = ( SELECT (column_name, column_name) FROM table2 WHERE column_name = alias.column_name) WHERE column_name = VALUE

下面是这样一个例子: 两个表a、b,想使b中的memo字段值等于a表中对应id的name值 表a:

1 2 3 4 
id    name  1     王  2     李  3     张

表b:

1 2 3 4 
id    ClientName    1  2  3

(MS SQL Server)语句:

1 
UPDATE b   SET   ClientName    = a.name    FROM a,b    WHERE a.id = b.id

(Oralce)语句:

1 
UPDATE b   SET   (ClientName)    =   (SELECT name FROM a WHERE b.id = a.id)

update set from 语句格式 当where和set都需要关联一个表进行查询时,整个update执行时,就需要对被关联的表进行两次扫描,显然效率比较低。

对于这种情况,Sybase和SQL SERVER的解决办法是使用UPDATE…SET…FROM…WHERE…的语法,实际上就是从源表获取更新数据。

在 SQL 中,表连接(left join、right join、inner join 等)常常用于 select 语句。 其实在 SQL 语法中,这些连接也是可以用于 update 和 delete 语句的,在这些语句中使用 join 还常常得到事半功倍的效果。

1 2 
UPDATE T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID FROM T_OrderForm A LEFT JOIN T_ProductInfo   B ON B.L_ID=A.ProductID

用来同步两个表的数据!

Oralce和DB2都支持的语法:

1 
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)

MS SQL Server不支持这样的语法,相对应的写法为:

1 
UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID

个人感觉MS SQL Server的Update语法功能更为强大。MS SQL SERVER的写法:

1 
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

在Oracle和DB2中的写法就比较麻烦了,如下:

1 2 
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID) WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)

posted @ 2020-05-19 14:42 青蛙學堂 阅读(5) | 评论 (0)编辑 收藏

2020年5月15日

C# NEWTONSOFT.JSON读取json文件

public static void Readjson()
{
string jsonfile = "D://tsconfig1.json";

using (System.IO.StreamReader file = System.IO.File.OpenText(jsonfile))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
JObject o = (JObject)JToken.ReadFrom(reader);
string a = o["lotname"].ToString();
var b = o["other"];
var c = b["lotaddress"];
var d = o["devices"];
foreach(JObject e in d)
{
var deviceID = e["deviceID"];
var name = e["name"];
var IP = e["IP"];
}
}
}

}

 

 

 

tsconfig1.json文件内容

{
"lotname": "停车系统",
"devices": [
{
"deviceID": "EI1001",
"name": "东道进口相机",
"type": "进口",
"IP": "192.168.1.100"
},
{
"deviceID": "EI1002",
"name": "东道进口语音屏",
"type": "进口",
"IP": "192.168.1.102"
},
{
"deviceID": "EO1003",
"name": "东道出口相机",
"type": "出口",
"IP": "192.168.1.103"
},
{
"deviceID": "EO1004",
"name": "东道出口语音屏",
"type": "出口",
"IP": "192.168.1.104"
}
],
"other": { "lotname": "wz001", "lotaddress": "wenzhou" }
}

注意:记事本另存为 以上内容时编码选择 U-TF8

posted @ 2020-05-15 13:16 青蛙學堂 阅读(11) | 评论 (0)编辑 收藏

c# DataTable转换到List

DataTable转换到List

方法一:

public static IList<T> ConvertTo<T>(DataTable table)  
{  
   if (table == null)  
   {  
       return null;  
   }  
    
   List<DataRow> rows = new List<DataRow>();  
    
   foreach (DataRow row in table.Rows)  
   {  
       rows.Add(row);  
   }  
    
   return ConvertTo<T>(rows);  
}  
    
public static IList<T> ConvertTo<T>(IList<DataRow> rows)  
{  
   IList<T> list = null;  
    
   if (rows != null)  
   {  
       list = new List<T>();  
    
       foreach (DataRow row in rows)  
       {  
           T item = CreateItem<T>(row);  
           list.Add(item);  
       }  
   }  
    
   return list;
}    
    
public static T CreateItem<T>(DataRow row)    
{
    T obj = default(T);    
    if (row != null)    
    {    
       obj = Activator.CreateInstance<T>();    
    
       foreach (DataColumn column in row.Table.Columns)    
       {    
           PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);    
           try 
           {    
               object value = row[column.ColumnName];    
               prop.SetValue(obj, value, null);    
           }    
           catch 
           {  //You can log something here     
               //throw;    
           }    
       }    
    }    
    
return obj;    
}
*************************************

/// </summary>
        /// <param name="Json"></param>
        /// <returns></returns>
        public static object ToJson(this string Json)
        {
            return JsonConvert.DeserializeObject(Json);
        }
        public static string ToJson(this object obj)
        {
            IsoDateTimeConverter idtc = new IsoDateTimeConverter();
            idtc.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
            JsonSerializerSettings jsonSettings = new JsonSerializerSettings
            {
            };
            jsonSettings.Converters.Add(idtc);
            return JsonConvert.SerializeObject(obj, jsonSettings);
        }







posted @ 2020-05-15 11:23 青蛙學堂 阅读(2) | 评论 (0)编辑 收藏

C# DataTable 转换成JSON数据 三种方法

在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>、DataTable转换为Json格式。特别在使用Extjs框架的时候,Ajax异步请求的数据格式就是Json。鉴于此,我今天来分享将DataTable 转换成 Json的3种方法。换句话说如何在ASP.NET将一个DataTable序列化为 Json数组。或者如何从一个DataTable返回一个Json字符串。这篇文章将采用StringBuilder,JavaScriptSerializer和 Json.Net DLL (Newtonsoft) 这3种方法实现这一目标。
Json概述
JavaScript Object Notation (Json)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。这些特性使Json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。Json采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯,包括C、C++、C#、Java、JavaScript、Perl、Python等等。
这些特性使Json成为一种理想的数据交换语言。因此 基于AJAX应用程序,Json已经成为一种用于数据交换的流行格式。总之,Json是一种存储和交换数据的语法,易于操作,也是除XML之外的不二之选。
步骤:
首先我们从Microsoft SQL Server 获取数据到DataTable,也可以给DataTable动态添加行。代码如下:
private DataTable getData()
{
DataTable dt = new DataTable();
dt.Columns.Add("编号", typeof(Int32));
dt.Columns.Add("姓名", typeof(string));
dt.Columns.Add("性别", typeof(string));
dt.Columns.Add("学历", typeof(string));
dt.Rows.Add(1, "王超", "男", "本科");
dt.Rows.Add(2, "周丽", "女", "专科");
dt.Rows.Add(3, "李娟", "女", "专科");
dt.Rows.Add(4, "杨明", "男", "硕士");
dt.Rows.Add(5, "张德", "男", "本科");
return dt;
}
下面开始通过每一种方法实现DataTable转换成 Json 对象。
方法1:使用StringBuilder
这是Json样本数据的样子: {"姓名 ":"张三", "年龄":"30"}。Json里用花括号保存对象,它可以包含多个名称/值对。所以使用StringBuilder我们可以创建一个类似的Json字符串。
由于要使用StringBuilder类,我们首先需要导入System.Text命名空间,如下:
using System.Text;
下面的代码将生成一个Json字符串,遍历DataTable的行和列,获取数据,添加到一个StringBuilder对象 JsonString,然后返回这个对象。
public string DataTableToJson(DataTable table)
{
var JsonString = new StringBuilder();
if (table.Rows.Count > 0)
{
JsonString.Append("[");
for (int i = 0; i < table.Rows.Count; i++)
{
JsonString.Append("{");
for (int j = 0; j < table.Columns.Count; j++)
{
if (j < table.Columns.Count - 1)
{
JsonString.Append("\"" + table.Columns[j].ColumnName.ToString() + "\":" + "\"" + table.Rows[i][j].ToString() + "\",");
}
else if (j == table.Columns.Count - 1)
{
JsonString.Append("\"" + table.Columns[j].ColumnName.ToString() + "\":" + "\"" + table.Rows[i][j].ToString() + "\"");
}
}
if (i == table.Rows.Count - 1)
{
JsonString.Append("}");
}
else
{
JsonString.Append("},");
}
}
JsonString.Append("]");
}
return JsonString.ToString(); 
}
方法2:使用 JavaScriptSerializer.
首先我们添加System.Web.Script.Serialization命名空间,如下:
using System.Web.Script.Serialization;
JavaScriptSerializer这个类是由异步通信层内部使用来序列化和反序列化数据。如果序列化一个对象,就使用序列化方法。反序列化Json字符串,使用Deserialize或DeserializeObject方法。在这里,我们使用序列化方法得到Json格式的数据。代码以下:
public string DataTableToJsonWithJavaScriptSerializer(DataTable table)
JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
List < Dictionary < string, object >> parentRow = new List < Dictionary < string, object >> (); 
Dictionary < string, object > childRow; 
foreach(DataRow row in table.Rows)
childRow = new Dictionary < string, object > (); 
foreach(DataColumn col in table.Columns)
childRow.Add(col.ColumnName, row[col]); 
parentRow.Add(childRow); 
return jsSerializer.Serialize(parentRow); 
}
方法3:使用Json.Net DLL (Newtonsoft)。
这个方法中要添加Json.Net DLL引用,我们可以从Newtonsoft下载Json.Net DLL,再导入命名空间,代码如下:
using Newtonsoft.Json;
public string DataTableToJsonWithJsonNet(DataTable table)
string JsonString=string.Empty; 
JsonString = JsonConvert.SerializeObject(table); 
return JsonString; 
}
StringBuilder方法的全部代码:
using System;
using Susing System.Data;
public partial class Default2 : System.Web.UI.Page
private string sasss;
protected void Page_Load(object sender, EventArgs e)
{
DataTable table = getData();
sasss = DataTableToJson(table);
Response.Write(sasss + "<br/>");
}
public string DataTableToJson(DataTable table)
{
var JsonString = new StringBuilder();
if (table.Rows.Count > 0)
{
JsonString.Append("[");
for (int i = 0; i < table.Rows.Count; i++)
{
JsonString.Append("{");
for (int j = 0; j < table.Columns.Count; j++)
{
if (j < table.Columns.Count - 1)
{
JsonString.Append("\"" + table.Columns[j].ColumnName.ToString() + "\":" + "\"" + table.Rows[i][j].ToString() + "\",");
}
else if (j == table.Columns.Count - 1)
{
JsonString.Append("\"" + table.Columns[j].ColumnName.ToString() + "\":" + "\"" + table.Rows[i][j].ToString() + "\"");
}
}
if (i == table.Rows.Count - 1)
{
JsonString.Append("}");
}
else
{
JsonString.Append("},");
}
}
JsonString.Append("]");
}
return JsonString.ToString(); 
}
private DataTable getData()
{
DataTable dt = new DataTable();
dt.Columns.Add("编号", typeof(Int32));
dt.Columns.Add("姓名", typeof(string));
dt.Columns.Add("性别", typeof(string));
dt.Columns.Add("学历", typeof(string));
dt.Rows.Add(1, "王超", "男", "本科");
dt.Rows.Add(2, "周丽", "女", "专科");
dt.Rows.Add(3, "李娟", "女", "专科");
dt.Rows.Add(4, "杨明", "男", "硕士");
dt.Rows.Add(5, "张德", "男", "本科");
return dt;
}
}

posted @ 2020-05-15 10:49 青蛙學堂 阅读(5) | 评论 (0)编辑 收藏

C# DataTable 转换成JSON数据

引用名称空知间using System.Web.Script.Serialization;(如果无法引用,请道添加程序集)
JavaScriptSerializer js = new JavaScriptSerializer();
        //序列化成回json字符串
         string json= js.Serialize("数据库查询出答来的数据");
/// <summary>
        /// 将datatable转换为json  
        /// </summary>
        /// <param name="dtb">Dt</param>
        /// <returns>JSON字符串</returns>
        public static string Dtb2Json(DataTable dtb)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            System.Collections.ArrayList dic = new System.Collections.ArrayList();
            foreach (DataRow dr in dtb.Rows)
            {
                System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>();
                foreach (DataColumn dc in dtb.Columns)
                {
                    drow.Add(dc.ColumnName, dr[dc.ColumnName]);
                }
                dic.Add(drow);
            }
            //序列化  
            return jss.Serialize(dic);
        }

posted @ 2020-05-15 10:34 青蛙學堂 阅读(3) | 评论 (0)编辑 收藏

StringBuilder和string 线程安全

String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
StringBuffer
  StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
 
StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
1、线程安全:
指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现e799bee5baa6e997aee7ad94e78988e69d8331333431353936意外结果。
2、线程不安全:
是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
举例说明:假设售票系统有1000张票,A和B同时来买票,如果是线程不安全,那么可能售票系统可能出现1000-1去同时执行的情况,最终结果是A和B都买完后剩下999张票,而不是998张。

posted @ 2020-05-15 10:27 青蛙學堂 阅读(2) | 评论 (0)编辑 收藏

2020年5月14日

JSON的简介


一、什么是JSON?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。

JSON就是一串字符串 只不过元素会使用特定的符号标注。

{} 双括号表示对象

[] 中括号表示数组

"" 双引号内是属性或值

: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象

而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组

当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象

二、JSON解析之传统的JSON解析

1、生成json字符串

public static String createJsonString(String key, Object value) {         JSONObject jsonObject = new JSONObject();         jsonObject.put(key, value);         return jsonObject.toString(); }


一、JSONObject和JSONArray的数据表示形式

  JSONObject的数据是用 {  } 来表示的,

        例如:   { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null  }  

  而JSONArray,顾名思义是由JSONObject构成的数组,用  [ { } , { } , ......  , { } ]  来表示

       例如:   [ {  "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" }  ,  {  "content" : null, "beginTime" : 1398873600000  "endTime" } ] ; 

        表示了包含2个JSONObject的JSONArray。

  可以看到一个很明显的区别,一个用的是 {  }  ,一个最外面用的是 [  ]  ;

 

二、如何从字符串String获得JSONObject对象和JSONArray对象

        JSONObject  jsonObject  = new JSONObject (String  str);

        JSONArray jsonArray = new JSONArray(String str  ) ;

 

三、如何从JSONArray中获得JSONObject对象

       大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样

       JSONObject   jsonObject = (JSONObject)jsonArray.get(i);

        JSONObject   jsonObject  =  jsonArray.getJSONObject(i) ;  

     两者都可。第一种注意转换 

 

四、获取JSON内的数据

       int   jid= jsonObject.getInt ( "id" ) ;    //  这里的jid得到的数据就是123.

       String  jcourse=jsonObject.getString( " courseID") ;   // 这里的jcourse得到的数据就是huangt-test.

      Strirng jcourse = jsonObject.get("courseID").toString();

 

 五、一般地为键值对

       eg:{  name:"xm", value:"张三"}

       String jname = null;

       if(jsonObject.get("name").equals("xm")){

         jname=jsonObject.get("value").toString();

       }

 

 六:  JSON.parse( str )    --> 把字符串转为JSON对象

         JSON.stringify( obj ) -->把对象解析为字符串

 


JSONObject、JSONArray区别

 json,就是一个键对应一个值,超级简单的一对一关系。现在用到的json那可以层层嵌套啊,刚开始接触的时候,确实有种崩溃的赶脚,不想去理,取个数据还那么麻烦。其实,就跟if else语句一样,如果if中套if,if中再套if,写的规范了还行,要是代码格式不规范,那我们肯定也看着麻烦。所以啊,对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了。 举个例子说明,如下:

[{name1:{name2:{name3:'value1',name4:'value2'}}},{}]

  从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。

     工作中需要取出name4的值,你们会怎么取呢?。最初我都想过字符串截取,那时还不了解JSONArray,现在知道了,取出来也就相当容易了。

     取出name4值过程步骤:1,将以上字符串转换为JSONArray对象;2,取出对象的第一项,JSONObject对象;3,取出name1的值JSONObject对象;4,取出name2的值JSONObject对象;5,取出name4的值value2。

    示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:

  JSONArray.fromObject(String)

  1. JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式  
  2. JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项  
  3. String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getJSONObject("name4"); 

好了我们说说这两个对象。

1,JSONObject

  json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}

2,JSONArray

  json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的

  Json对象中添加的是键值对,JSONArray中添加的是Json对象

  1. JSONObject Json = new JSONObject();  
  2. JSONArray JsonArray = new JSONArray();  
  3.   
  4. Json.put("key", "value");//JSONObject对象中添加键值对  
  5. JsonArray.add(Json);//将JSONObject对象添加到Json数组中  

3,JSONObject与Map

    Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。

  1. Map<String,String> strmap=new JSONObject();  

    这里的需求是:request对象获取的map,想要返回json格式也不用白费力了。

posted @ 2020-05-14 16:20 青蛙學堂 阅读(4) | 评论 (0)编辑 收藏

2020年5月13日

用友U8 归纳采购退货结算三种情况

用友U8 归纳采购退货结算三种情况

对应版本: 8.52

问题现象: 客户经常处理退货结算的问题

问题原因: 应系统掌握各种情况

解决方案: 

结算前全额退货
即已录入采购入库单,但未进行采购结算,并且全额退货。
填制一张全额数量的红字采购入库单。
把这张红字采购入库单与原入库单进行结算,冲抵原入库单数据。

结算前部分退货
即已录入采购入库单但未进行采购结算,并且部分退货。
填制一张部分数量的红字采购入库单。
填制一张相对应的采购发票,其中发票上的数量=原入库单数量-红字入库单数量。
把这张红字入库单与原入库单、采购发票进行结算,冲抵原入库单数据。 

结算后退货
即已录入采购入库单、采购发票,并且已进行了采购结算。
填制一张红字采购入库单,再填制一张红字发票。
把这张退货单与红字发票进行结算,冲抵原入库单数据。
当收到供货单位开具的红字(负数)发票,可分以下情况进行结算:
货物未入库的红字发票结算:没有对应的入库单,采用【手工结算】,不选入库单,直接选择原兰字发票和红字发票进行结算。
货物已退货的红字发票结算:在取得供货单位的退货发票后,进行结算。如果退货单与退货发票一致,可以〖自动结算〗,否则采用〖手工结算〗。

posted @ 2020-05-13 13:35 青蛙學堂 阅读(2) | 评论 (0)编辑 收藏

仅列出标题  下一页
<2020年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(7)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜

60天内阅读排行